我构建了一个看起来像这样的PyQt5应用程序(我知道我有很多进口商品,我正在学习,所以目前我希望完全自由):
import sys
from PyQt5.QtGui import *
from PyQt5.QWidgets import *
from PyQt5.QtCore import *
class Menu(QMainWindow):
def __init__(self)
super().__init__()
#create bar
bar = self.menuBar()
#create bar menus
file = bar.addMenu("File")
about = bar.addMenu("About")
#create actions
quit_action = QAction("&Quit", self)
quit_action.setShortcut('Ctrl+Q')
about_action = QAction("&About...", self)
#add actions
file.addAction(quit_action)
about.addAction(about_action)
#what to do with actions
quit_action.triggered.connect(self.quit_func)
about_action.triggered.connect(self.about_func)
#window properties
self.setWindowTitle("Hello World")
self.resize(600, 400)
self.show()
def quit_func(self):
sys.exit()
def about_func(self):
pass
class About(QWidget):
def __init__(self):
super().__init__(parent)
#widgets
self.l1 = QLabel('Hello World')
self.l1.setAlignment(Qt.AlignCenter)
self.l2 = QLabel('Description of the Application')
self.l2.setAlignment(Qt.AlignCenter)
#horiz box
h_box = QHBoxLayout()
h_box.addStretch()
h_box.addWidget(self.l2)
h_box.addStretch()
#vert box
v_box = QVBoxLayout()
v_box.addWidget(self.l1)
v_box.addLayout(h_box)
v_box.addStretch()
self.setLayout(v_box)
#window properties
self.setWindowTitle("About Hello World")
self.setFixedSize(250,150)
self.show()
if not QApplication.instance()
app = QApplication(sys.argv)
else:
app = QApplication.instance()
main = Menu()
main.show()
sys.exit(app.exec())
我希望about_func()函数调用About()类,因此我可以打开一个与Menu()类创建的主窗口分开的窗口。
此代码抛出错误:
TypeError: QMainWindow(parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags()): argument 1 has unexpected type 'sip.wrappertype'
关于第9行中的super().__init__()
。
我该如何以有效的方式实施此操作?随时批评我的代码的任何方面。
(编辑以澄清问题)
答案 0 :(得分:1)
从您的代码中还不清楚是使用Python 2还是3,无论如何,super的基本语法是:
super(yourClass, instance).method(args)
所以,在您的情况下,它们都是错误的:-)第一个应该是:
class Menu(QMainWindow):
def __init__(self, parent=None):
super(Menu, self).__init__(parent)
此外,在Python3中,可以省略super()的参数,因此第二个示例可以是:
class About(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
仔细阅读Built-in Functions。我知道这是一个很长的页面,但是它包含了Python的一些基础知识,对它们的研究/理解几乎是必须的。