我的目标是简单地通过单击“下一步”按钮将应用程序中的对话框切换到另一个,然后关闭前一个对话框。所以,我有一个启动脚本:在对话框之间切换(QDialog)PyQt5
from PyQt5.QtWidgets import QApplication, QDialog
from gui.Ui_base import Ui_Base
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = QDialog()
ui = Ui_Base()
ui.setupUi(window)
window.show()
sys.exit(app.exec_())
然后进入此对话框,它的图形用户界面是由pyuic5创建:
from PyQt5 import QtCore, QtGui, QtWidgets
from gui.Ui_scripts import Ui_Scripts
class Ui_Base(QtWidgets.QDialog):
def setupUi(self, Base):
"""Here goes a lot of code for creating gui like size, place and etc."""
self.nextButton = QtWidgets.QPushButton(Base)
self.nextButton.clicked.connect(self.openScripts)
QtCore.QMetaObject.connectSlotsByName(Base)
def openScripts(self, Base):
scriptsWindow = QDialog()
scriptsUi = Ui_Scripts()
scriptsUi.setupUi(scriptsWindow)
Base.close()
scriptsWindow.show()
scriptsWindow.exec_()
我得到一个错误:
File "/Users/max/Project/gui/Ui_base.py", line 125, in openScripts Base.close()
AttributeError: 'bool' object has no attribute 'close'
所以,实际上它打开了下一个对话框,但不隐藏当前的对话框。我尝试了像hide()和其他方法的QDialog的其他方法,但没有任何工作。而且我并不真正跟Base(实际上是一个窗口)bool?谢谢。
为什么不'self.close()'?另外,应该是scriptsWindow.exec_() – mdurant
是的,不是exec而是exec_,但它不会影响它。与self.close()对话框(基地)只是留在新的一个,但不会消失。 – boyks