PyQt5 有错误 'MainWindow' 没有属性 'exec_'
Posted
技术标签:
【中文标题】PyQt5 有错误 \'MainWindow\' 没有属性 \'exec_\'【英文标题】:PyQt5 has error 'MainWindow' has no attribute 'exec_'PyQt5 有错误 'MainWindow' 没有属性 'exec_' 【发布时间】:2021-03-09 23:00:17 【问题描述】:我刚开始在课堂项目中使用 PyQT,但遇到了一些问题。
我想启动 MainWindow 并有 2 个按钮来启动 2 个单独的对话框(对话框和子对话框);但是我收到以下错误:
sys.exit(mainwindowa.exec_())
AttributeError: 'MainWindow' object has no attribute 'exec_'
这是我的代码。我已经尝试过如何编写 exec_ 函数,就像在 MainWindow 类中编写它一样,但我得到了同样的错误,我很困惑该怎么做
from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog,
QDialogButtonBox, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout,
QLabel, QLineEdit, QMenu, QMenuBar, QPushButton, QSpinBox, QTextEdit,
QVBoxLayout, QMainWindow)
import sys
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle("My App")
layout = QVBoxLayout()
self.mainwindowapp = QPushButton('Dialog')
self.subwindowapp = QPushButton('CustomDialog')
layout.addWidget(self.mainwindowapp)
layout.addWidget(self.subwindowapp)
self.setLayout(layout)
self.show()
self.mainwindowapp.clicked.connect(self.button_clicked)
def button_clicked(self):
run = Dialog()
run()
class Dialog(QDialog):
def __init__(self):
super(Dialog, self).__init__()
mainLayout = QVBoxLayout()
mainLayout.addWidget(self.formGroupBox)
mainLayout.addWidget(buttonBox)
self.setLayout(mainLayout)
class CustomDialog(QDialog):
def __init__(self):
super().__init__(CustomDialog, self)
self.layout = QVBoxLayout()
self.layout.addWidget(QLabel('e'))
self.setLayout(self.layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwindowa = MainWindow()
sys.exit(mainwindowa.exec_())
【问题讨论】:
【参考方案1】:你得出了一个错误的结论,你认为如果 QDialog 类有一个 exec_() 方法,那么 QMainWindow 等其他小部件也会有,这是不正确的。 QDialog 创建一个其他小部件没有的内部事件循环,因此在您的情况下使用 show() 方法并使用 QApplication 的 exec_() 方法:
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwindowa = MainWindow()
mainwindowa.show()
sys.exit(app.exec_())
【讨论】:
好的,谢谢您的回答!它对我有用,感谢您的所有帮助!以上是关于PyQt5 有错误 'MainWindow' 没有属性 'exec_'的主要内容,如果未能解决你的问题,请参考以下文章
Python PyQt5 对话框元素仅显示 exec_ 而没有显示
PyQt5 - 即使使用 QThread,MainWindow 中的 QMovie 也无法播放
[pyqt5][python][原创]pyqt5登陆界面跳转并关闭子窗口全部退出