Python 程序运行正常,但显示错误。为什么?
Python program works, but it shows an error. Why?
我是编程新手,我已经在这个网站和其他网站上进行了研究,但我找不到任何对我的问题有帮助的东西。我正在编写一个 Python 程序,当按下不同的按钮时,会打开多个 PyQt windows。这是我的程序:
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_()
我创建了几个子 windows,例如:
def continuar_clicked(self):
window = ElmWindow(self)
window.show()
window.exec_()
self.close()
如果我不写
window.exec_()
window 会打开,但按钮不起作用。但是当我写它时出现错误:
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
方法 运行s 直到它到达缺少方法的行,然后停止。
这表明不在 continuar_clicked
中调用 self.close()
可以使您的 GUI 正常工作。调用 self.close()
显然破坏了程序。
所以这是什么意思?那么它指向一个错误的对象层次结构。您正在生成新的 windows,它们是现有 window 的子项,然后 关闭 父项 window。父 window 很可能被删除,这取决于 Qt.WA_DeleteOnClose
属性是否为您的 windows.
设置为 true
所以我建议重新设计您的程序。也许有一个总是打开的父 window,或者写一个 window 管理 class 来处理所有 windows 的 creation/closing(例如 window 对象从您的 window 管理对象调用一个方法来关闭当前 window 并打开一个新的 window)。
最终如何构建代码将取决于您,因为很难从最小的示例中判断程序的细节
我是编程新手,我已经在这个网站和其他网站上进行了研究,但我找不到任何对我的问题有帮助的东西。我正在编写一个 Python 程序,当按下不同的按钮时,会打开多个 PyQt windows。这是我的程序:
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_()
我创建了几个子 windows,例如:
def continuar_clicked(self):
window = ElmWindow(self)
window.show()
window.exec_()
self.close()
如果我不写
window.exec_()
window 会打开,但按钮不起作用。但是当我写它时出现错误:
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
方法 运行s 直到它到达缺少方法的行,然后停止。
这表明不在 continuar_clicked
中调用 self.close()
可以使您的 GUI 正常工作。调用 self.close()
显然破坏了程序。
所以这是什么意思?那么它指向一个错误的对象层次结构。您正在生成新的 windows,它们是现有 window 的子项,然后 关闭 父项 window。父 window 很可能被删除,这取决于 Qt.WA_DeleteOnClose
属性是否为您的 windows.
所以我建议重新设计您的程序。也许有一个总是打开的父 window,或者写一个 window 管理 class 来处理所有 windows 的 creation/closing(例如 window 对象从您的 window 管理对象调用一个方法来关闭当前 window 并打开一个新的 window)。
最终如何构建代码将取决于您,因为很难从最小的示例中判断程序的细节