我是一个编程新手,我在这个网站和其他网站上做过研究,但是我找不到任何对我的问题有帮助的东西。我正在编写一个Python程序,当按下不同的按钮时,会打开几个PyQt窗口。这是我的程序:
import sys, os,
from PyQt4 import QtCore, QtGui, uic
Ui_IntroWindow = uic.loadUiType('introduction.ui')[0]
Ui_ElmWindow = uic.loadUiType('elm.ui')[0]
Ui_ClueWindow = uic.loadUiType('pistaelm.ui') [0]
Ui_ButtonWindow = uic.loadUiType('firtsguibutton.ui')[0]
class IntroWindow(QtGui.QMainWindow, Ui_IntroWindow):
def __init__ (self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.continuar.clicked.connect(self.continuar_clicked)
def continuar_clicked(self):
window = ElmWindow(self)
window.show()
window.exec_()
self.close()
class ElmWindow(QtGui.QMainWindow, Ui_ElmWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.bpista.clicked.connect(self.pista)
self.bcontinuar.clicked.connect(self.continuar)
def pista(self):
pistaelm = ClueWindow(self)
pistaelm.show()
pistaelm.exec_()
def continuar(self):
elemento = str(self.elemento.text())
main = ButtonWindow(self)
if elemento == 'cobalto':
main.show()
main.exec_()
self.close()
class ClueWindow(QtGui.QMainWindow, Ui_ClueWindow):
def __init__ (self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
class ButtonWindow(QtGui.QMainWindow, Ui_ButtonWindow):
def __init__(self, parent = None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
app = QtGui.QApplication(sys.argv)
myWindow = IntroWindow()
myWindow.show()
app.exec_()
我创建了几个子窗口,例如:
def continuar_clicked(self):
window = ElmWindow(self)
window.show()
window.exec_()
self.close()
如果我不写信
window.exec_()
窗户会开的,但按钮不起作用。但是当我写的时候,我得到了一个错误:
Traceback (most recent call last):
File "C:\Users\Work\Desktop\Project\project.py", line 19, in continuar_clicked
window.exec_()
AttributeError: 'ElmWindow' object has no attribute 'exec_'
我怎样才能阻止错误?你知道吗
从
QMainWindow
派生的对象没有方法exec_()
。这就是为什么你会看到例外。你知道吗此异常修改程序行为的原因是,当引发异常时,当前正在执行的插槽的其余部分不会运行。因此,您的
continuar_clicked
方法将一直运行,直到它到达包含缺少的方法的行,然后停止。你知道吗这表明了这样一个事实:在
continuar_clicked
中不调用self.close()
可以保持GUI正常工作。调用self.close()
显然破坏了程序。你知道吗这是什么意思?它指向一个坏的对象层次结构。生成新窗口,这些窗口是现有窗口的子窗口,然后关闭父窗口。很可能父窗口正在被删除,这取决于您的窗口的^{} 属性是否设置为true。你知道吗
所以我建议重新设计你的程序。可能有一个始终打开的父窗口,或者编写一个处理所有窗口的创建/关闭的窗口管理类(例如,窗口对象从窗口管理对象调用一个方法来关闭当前窗口并打开一个新窗口)。你知道吗
最终如何构造代码将取决于您自己,因为很难从一个极小的示例中衡量程序的细节
相关问题 更多 >
编程相关推荐