Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySide子窗口_Python_Qt5_Pyside - Fatal编程技术网

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()