我的目標是簡單地通過單擊「下一步」按鈕將應用程序中的對話框切換到另一個,然後關閉前一個對話框。所以,我有一個啓動腳本:在對話框之間切換(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