我想多次在对话框之间切换,但是我现在拥有的代码只进行了两次切换,然后才停止。
我尝试设置可见性为True和False而不是关闭对话框,并且还使用Dialog.exec_()而不是Dialog.exec()
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(633, 242)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(120, 70, 401, 81))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.pushButton.clicked.connect(self.page_2)
def page_2(self):
start_D2()
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog_1"))
self.pushButton.setText(_translate("Dialog", "Go to Second Page"))
class Ui_Dialog_2(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(633, 242)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(120, 70, 401, 81))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.pushButton.clicked.connect(self.page_1)
def page_1(self):
start_D1()
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog_2"))
self.pushButton.setText(_translate("Dialog", "Go to First Page"))
def start_D2():
try:
Dialog.close()
ui = Ui_Dialog_2()
ui.setupUi(Dialog_2)
Dialog_2.exec()
except Exception as e:
print(e)
def start_D1():
try:
Dialog_2.close()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.exec()
except Exception as e:
print(e)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
Dialog_2 = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
我需要的是每次单击按钮时都切换一次对话框,而不仅仅是一次或两次。
答案 0 :(得分:0)
您遇到以下错误:
解决方案是,当您按下按钮时,关闭同一对话框并打开另一个窗口。
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(633, 242)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(120, 70, 401, 81))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog_1"))
self.pushButton.setText(_translate("Dialog", "Go to Second Page"))
class Ui_Dialog_2(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(633, 242)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(120, 70, 401, 81))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog_2"))
self.pushButton.setText(_translate("Dialog", "Go to First Page"))
class Dialog(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
self.setupUi(self)
# close the window
self.pushButton.clicked.connect(self.close)
class Dialog2(QtWidgets.QDialog, Ui_Dialog_2):
def __init__(self, parent=None):
super(Dialog2, self).__init__(parent)
self.setupUi(self)
# close the window
self.pushButton.clicked.connect(self.close)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w1 = Dialog()
w2 = Dialog2()
# open another dialog
w1.pushButton.clicked.connect(w2.show)
w2.pushButton.clicked.connect(w1.show)
w1.show()
sys.exit(app.exec_())