Python PySide子窗口
我想在我的应用程序的Python PySide子窗口,python,qt5,pyside,Python,Qt5,Pyside,我想在我的应用程序的主窗口中打开一个子窗口。我不允许用户与父窗口交互,只允许用户打开子窗口一次。例如,许多应用程序中的“关于”窗口 class Ui_AboutDialog(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(500, 300) MainWindow.setMinimumSize(Qt
主窗口中打开一个子窗口。我不允许用户与父窗口交互,只允许用户打开子窗口一次。例如,许多应用程序中的“关于”窗口
class Ui_AboutDialog(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(500, 300)
MainWindow.setMinimumSize(QtCore.QSize(500, 300))
MainWindow.setMaximumSize(QtCore.QSize(500, 300))
MainWindow.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
self.centralwidget.setObjectName("centralwidget")
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 10, 481, 181))
self.label.setObjectName("label")
#MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
以下是我在主窗口中对其的调用方式:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
...
...
self.actionAbout.triggered.connect(lambda: self.openAbout(MainWindow))
def openAbout(self, MainWindow):
aboutDialog = QtGui.QDialog(MainWindow)
aboutUi = Ui_AboutDialog()
aboutUi.setupUi(aboutDialog)
aboutDialog.show()
...
...
解决方案
class Ui\u主窗口的setupUi
中将self.AboutDialog
设置为None
我认为在使用self.AboutDialog.setModal(True)
时,我们可以不使用self.AboutDialog
,如下所示:
def openAbout(self, MainWindow):
AboutDialog = QtGui.QDialog(MainWindow)
aboutUi = Ui_AboutDialog()
aboutUi.setupUi(AboutDialog)
AboutDialog.setModal(True)
AboutDialog.show()
虽然没有明确说明,但我假设您正在询问如何使QDialog
只显示一次?如果是这样,那么在Ui\u MainWindow
类中实现一个变量如何,该变量跟踪子窗口是否已经打开过一次。您可以轻松地修改openAbout
函数来检查此变量,并且仅在以前未打开子窗口的情况下才打开它。在子对话框仍然打开的情况下,如何禁止用户与父窗口交互?如上所述,您需要将QDialog
设置为模式。使用setModal(true)
并查看我包含的链接的第一段,以获得详细的解释。希望这有帮助。
def openAbout(self, MainWindow):
AboutDialog = QtGui.QDialog(MainWindow)
aboutUi = Ui_AboutDialog()
aboutUi.setupUi(AboutDialog)
AboutDialog.setModal(True)
AboutDialog.show()