Пример кода я использую:сделать модальное QDialog минимизировать при QMainWindow минимизированы (с использованием PyQt 5)
import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.open_about = False
self.openAction = QtWidgets.QAction('About', self)
self.openAction.triggered.connect(self.aboutDialog)
menuBar = self.menuBar()
fileMenu = menuBar.addMenu('&File')
fileMenu.addAction(self.openAction)
self.calendar = QtWidgets.QCalendarWidget(self)
self.setCentralWidget(self.calendar)
def about_state_upd(self, value):
self.open_about = value
def aboutDialog(self):
self._about = AboutDialog(self)
self._about.exec_()
def hideEvent(self, hideEvent):
if self.open_about == True:
self._about.setVisible(False)
def showEvent(self, showEvent):
if self.open_about == True:
if self._about.isHidden() == True:
self._about.setModal(True)
self._about.setVisible(True)
class AboutDialog(QtWidgets.QDialog):
def __init__(self, parent):
super(AboutDialog, self).__init__(parent)
self.setMinimumSize(400, 350)
self.parent().about_state_upd(True)
def closeEvent(self, closeEvent):
self.parent().about_state_upd(False)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app_window = MainWindow()
app_window.showMaximized()
sys.exit(app.exec_())
Этот код в основном работает, но кажется очень сложным. Есть ли более простой и понятный способ сделать это так, что когда модальный QDialog будет открыт, если QMainWindow будет сведен к минимуму, QDialog также будет сведен к минимуму (и наоборот, когда QMainWindow будет восстановлен)?
Код работает на KDE Neon (дистрибутив на основе Kubuntu).
Для меня, он отлично работает без всех '* Event()' переопределяет. Модальный диалог должен автоматически синхронизироваться с родительским окном. (NB: проверено на archlinux с диспетчером окон Openbox). – ekhumoro
Если О программе является модальным, как можно свести к минимуму главное окно: по крайней мере, в Windows основное окно не будет реагировать на какие-либо действия (например, минимизировать, максимизировать, закрыть и т. Д.), Если выполняется модальное диалоговое окно. Если я сделаю диалог «О программе» немодальным в вашем коде (call show() вместо exec()), минимизация главного окна также минимизирует диалог «О программе» (как прокомментировал ekhumoro), а восстановление восстанавливает оба. – Schollii
@ekhumoro Спасибо за ваши отзывы. Я также попробовал запустить код (без каких-либо переопределений * Event()) на xfce и (как вы оба говорите), он работает так, как должен. Итак, теперь ясно, что ошибка KDE - Kubuntu 16.04 LTS, Arch с KDE и KDE Neon stable - все те же проблемы. Я напишу отчет об ошибке для pyqt и/или KDE утром. – poetofzwan