【发布时间】:2026-02-04 15:25:01
【问题描述】:
我的目标只是通过单击“下一步”按钮将应用程序中的对话框切换到另一个,然后关闭前一个。所以,我有一个起始脚本:
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_())
然后进入这个对话框,它的GUI是由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'
所以,实际上它确实会打开下一个对话框,但不会隐藏当前对话框。我尝试了 QDialog 的其他方法,例如 hide() 等,但没有任何效果。而且我真的不了解 Base (实际上是一个窗口) bool 吗?谢谢。
【问题讨论】:
-
为什么不
self.close()?另外,应该是scriptsWindow.exec_() -
是的,不是 exec 而是 exec_,但不影响它。而使用 self.close() 对话框(Base)只是停留在新对话框后面,但不会消失。
标签: python-3.x qt5 pyqt5