我想要实现的是Qt Widget循环。
简单的示例:
UI_dialog是QDialog,接受后将打开UI_mainwindow,它是QMainWindow。
UI_mainwindow中有一个按钮,如果单击该按钮,它将关闭UI_mainwindow并返回到UI_dialog。
我到目前为止所做的事情:
我尝试过:
在包含两个UI对象的Qthread中创建while循环,在UI_mainwindow内调用UI_dialog(有点成功,但有时可能由于我的糟糕设计而崩溃)
答案 0 :(得分:0)
在GUI中,您必须避免使用while True,因为GUI已经具有内部while True,它使您可以侦听事件并根据其执行内部任务。另一方面,线程应该是您的最后一个选择,因为GUI不应直接从另一个线程更新,它仅应在有阻止任务时使用。
在Qt的情况下,有允许更改通知的信号,它将连接到函数,以便在发出信号时调用后者。
from PyQt5 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.button = QtWidgets.QPushButton("Press me")
self.setCentralWidget(self.button)
self.button.clicked.connect(self.close)
class Dialog(QtWidgets.QDialog):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
buttonBox = QtWidgets.QDialogButtonBox()
buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
buttonBox.accepted.connect(self.accept)
buttonBox.rejected.connect(self.reject)
lay = QtWidgets.QVBoxLayout(self)
lay.addWidget(buttonBox)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w1 = MainWindow()
w2 = Dialog()
w1.button.clicked.connect(w2.show)
w2.accepted.connect(w1.show)
w2.show()
sys.exit(app.exec_())