python - PyQt5:使用类创建 Windows
问题描述
我有一个看起来像这样的 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'
参考super().__init__()
第 9 行。
我怎样才能以一种有效的方式实现这一点?随意批评我的代码的任何方面。
(编辑澄清问题)
解决方案
从您的代码来看,您使用的是 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)
仔细阅读内置函数。我知道这是一个很长的页面,但它包含了 Python 的一些基础知识,学习/理解它们几乎是强制性的。
推荐阅读
- java - 通过对角线遍历具有左倾对角线部分的二维数组来获取数组列表?
- oauth-2.0 - 如何将 slack 用户与 github 帐户关联?
- c# - 使用 Newtonsoft 获取 JSON 对象的键/值
- xaml - UWP MediaPlayer (Windows.Media.Playback.MediaPlayer) 上的内存泄漏
- java - 如何在 Netbeans IDE 上查看 Hibernate 到文件类别
- react-native - 反应原生推送通知 onRegister 问题
- javascript - Javascript在窗口中恢复被破坏的对象
- java - 在新帐户的空片段中显示提示
- python - 快速找到具有最大总不同元素的列表列表的子集
- c - 如何在 Clion 的屏幕缓冲区大小处设置不换行