我有一个PyQt5窗口,它将打开我创建的对话框窗口,该窗口要求用户做一些事情,然后单击一个关闭窗口的按钮。这两个窗口是用class RenameDialog(QtWidgets.QMainWindow):和class Prog(QtWidgets.QMainWindow):制作的。在Prog,我有self.renameDialog = RenameDialog(self)。在我的代码中
self.renameDialog.show()
#Other code to run after renameDialog window is closed但这是行不通的,因为我不知道如何等到renameDialog关闭。我尝试过将self.renameDialog.setWindowModality(QtCore.Qt.WindowModality)放在self.renameDialog.show()之前,我试图弄清楚如何使用.exec_(),但不知道在这个上下文中可以在哪里使用这个方法。在继续代码之前,是否有一种方法可以等到隐藏或销毁这个QtWidgets.QMainWindow?
发布于 2018-04-25 18:48:06
这里有两种可能性。
1.可以将对话框设置为模态。在这种情况下,与GUI的任何其他交互都会被阻止,直到用户关闭对话框为止。只有这样,代码才会继续。您需要从QDialog继承才能工作:
class RenameDialog(QDialog):
# ...
pass
class YourMainWindow(QMainWindow):
def show_dlg(self):
dlg = RenameDialog(self)
res = dlg.exec()
if res == QDialog.Accepted:
print('Accepted')
else:
print('Rejected')finished信号,并调用连接的回调函数。发布于 2022-09-01 14:49:34
在这里,我留下一个小的测试应用程序来测试QMainWindow充当QDialog的不同选项。
我是根据这个问题提出的:
这个问题的答案给了我@musicamante:
QMainWindow停止/暂停执行,直到窗口关闭(不是QDialog)
这是我的代码:
import sys
from PyQt6 import QtCore, QtWidgets
class Ui_FirstWindow(object):
def setupUi(self, FirstWindow):
FirstWindow.resize(400, 300)
self.centralWidget = QtWidgets.QWidget(FirstWindow)
self.pushButton = QtWidgets.QPushButton(self.centralWidget)
self.pushButton.setGeometry(QtCore.QRect(110, 130, 191, 23))
self.pushButton.setText("Load Second Window")
self.pushButton2 = QtWidgets.QPushButton(self.centralWidget)
self.pushButton2.setGeometry(QtCore.QRect(110, 170, 191, 23))
self.pushButton2.setText("LoadThirdWindow")
self.pushButton4 = QtWidgets.QPushButton(self.centralWidget)
self.pushButton4.setGeometry(QtCore.QRect(110, 210, 191, 23))
self.pushButton4.setText("4 Window")
self.pushButton5 = QtWidgets.QPushButton(self.centralWidget)
self.pushButton5.setGeometry(QtCore.QRect(110, 250, 191, 23))
self.pushButton5.setText("5 Window")
FirstWindow.setCentralWidget(self.centralWidget)
def LoadSecondWindow(self):
SecondWindow = QtWidgets.QMainWindow()
ui = Ui_SecondWindow()
ui.setupUi(SecondWindow)
SecondWindow.show()
class Ui_SecondWindow(object):
def setupUi(self, SecondWindow):
SecondWindow.resize(400, 300)
self.centralWidget = QtWidgets.QWidget(SecondWindow)
self.pushButton = QtWidgets.QPushButton(self.centralWidget)
self.pushButton.setGeometry(QtCore.QRect(110, 130, 191, 23))
SecondWindow.setCentralWidget(self.centralWidget)
self.pushButton.setText('PushButton')
class Controller:
def __init__(self):
pass
def Show_FirstWindow(self):
self.FirstWindow = QtWidgets.QMainWindow()
self.ui = Ui_FirstWindow()
self.ui.setupUi(self.FirstWindow)
self.ui.pushButton.clicked.connect(self.Show_SecondWindow)
self.ui.pushButton2.clicked.connect(self.Show_ThirdWindow)
self.ui.pushButton4.clicked.connect(self.Show_4Window)
self.ui.pushButton5.clicked.connect(self.Show_5Window)
self.FirstWindow.show()
def Show_SecondWindow(self):
self.SecondWindow = QtWidgets.QMainWindow()
self.ui = Ui_SecondWindow()
self.ui.setupUi(self.SecondWindow)
self.SecondWindow.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
self.SecondWindow.show()
print("Don't Stop")
def Show_ThirdWindow(self):
self.ThirdWindow = QtWidgets.QDialog()
self.ThirdWindow.exec()
print('Yess Stop Window 3')
def Show_4Window(self):
# https://stackoverflow.com/questions/19462112/pyqt-wait-until-widget-closes
self.widget = QtWidgets.QMainWindow()
self.widget.setAttribute(QtCore.Qt.WidgetAttribute.WA_DeleteOnClose)
self.widget.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
self.widget.show()
loop = QtCore.QEventLoop()
self.widget.destroyed.connect(loop.quit)
loop.exec() # wait ...
print('Yes Stop Window 4')
def Show_5Window(self):
def action5(self):
print('Yes Stop Window 5')
self.window5 = QtWidgets.QMainWindow()
self.ui = Ui_SecondWindow()
self.ui.setupUi(self.window5)
self.window5.setAttribute(QtCore.Qt.WidgetAttribute.WA_DeleteOnClose)
self.window5.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
self.window5.show()
self.window5.destroyed.connect(action5)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Controller = Controller()
Controller.Show_FirstWindow()
sys.exit(app.exec())https://stackoverflow.com/questions/50029201
复制相似问题