【发布时间】:2018-04-24 02:30:19
【问题描述】:
我在使用 PyQt5 的 Python GUI 应用程序中有多个窗口。 单击按钮时,我需要隐藏当前窗口并显示下一个窗口。 这从 WindowA 到 WindowB 工作正常,但是从 WindowB 到 WindowC 时出现错误。
我知道初始化中存在一些问题,因为 WindowB 中的初始化代码无法访问,但是作为 PyQt 的初学者,我无法弄清楚解决方案。
WindowA 代码:
from PyQt5 import QtCore, QtGui, QtWidgets
from WindowB import Ui_forWindowB
class Ui_forWindowA(object):
def setupUi(self, WindowA):
# GUI specifications statements here
self.someButton = QtWidgets.QPushButton(self.centralwidget)
self.someButton.clicked.connect(self.OpenWindowB)
# More GUI specifications statements here
def retranslateUi(self, WindowA):
# More statements here
def OpenWindowB(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_forWindowB()
self.ui.setupUi(self.window)
WindowA.hide()
self.window.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
WindowA = QtWidgets.QMainWindow()
ui = Ui_forWindowA()
ui.setupUi(WindowA)
MainWindow.show()
sys.exit(app.exec_())
WindowB 代码:
from PyQt5 import QtCore, QtGui, QtWidgets
from WindowB import Ui_forWindowB
class Ui_forWindowB(object):
def setupUi(self, WindowB):
# GUI specifications statements here
self.someButton = QtWidgets.QPushButton(self.centralwidget)
self.someButton.clicked.connect(self.OpenWindowC)
# More GUI specifications statements here
def retranslateUi(self, WindowB):
# More statements here
def OpenWindowB(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_forWindowC()
self.ui.setupUi(self.window)
WindowB.hide() # Error here
self.window.show()
# The below code doesn't get executed when Ui_forWindowB is called from A
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
WindowB = QtWidgets.QMainWindow()
ui = Ui_forWindowB()
ui.setupUi(WindowB)
MainWindow.show()
sys.exit(app.exec_())
从 A 到 B 都可以正常工作
WindowA.hide() # Works Properly
从 WindowB 调用 WindowC 时
WindowB.hide() # Shows error: name 'WindowB' is not defined
我知道初始化没有完成,因为“if”语句没有被执行。
如何让它工作? 在这个流程中我有更多的窗口要连接
【问题讨论】:
-
什么
if声明?除了__main__之外,您的代码中没有任何内容 -
@OmarEinea 是的,相同的 if 文件中的 WindowB 语句没有被调用,因此名称 WindowB 没有被初始化,最后 WindowB.hide() 不起作用
-
然后向我们展示 WindowB 代码
-
@OmarEinea 代码与 WindowA 相同....仍在编辑以供参考
标签: python python-3.x pyqt5