0
点赞
收藏
分享

微信扫一扫

PyQt5 QMainWindow与QWidget继承的不同之处


不知道大家有没有相同的困惑,就是在使用​​PyQt5​​​设计​​App​​​的时候不知道应该用​​class App​​​类继承​​QMainWindow​​​类还是​​QWidget​​类。这里我根据自己的理解来对这个问题进行一下说明。我们先来看两个分别继承不同类的例子。

例子​​1​​​.从​​QMainWindow​​​类继承,详情请参考​​PyQt5 基础框架​​​。很明显,这里我们继承了​​QMainWindow​​类并且得到了我们想要的结果。

那可不可以从​​QWidget​​类继承呢?答案是可以的。

例子​​2​​​.从​​QWidget​​类继承

import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QHBoxLayout, QWidget


class App(QWidget):
def __init__(self, parent=None):
super(App, self).__init__(parent)

self.left_list = QListWidget()
self.left_list.insertItem(0, "Contact")
self.left_list.insertItem(1, "Personal")
self.left_list.insertItem(2, "Educational")

hbox = QHBoxLayout()
hbox.addWidget(self.left_list)

# add this layout on QWidget
self.setLayout(hbox)


def main():
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec())


if __name__ == '__main__':
main()

运行后的结果如下图所示:

PyQt5 QMainWindow与QWidget继承的不同之处_类继承


但是这里有一个有趣的现象,在例子​​2​​​中,当我们使用​​class App​​​从​​QMainWindow​​​类继承时,​​Gui​​​界面就无法正常显示了,这是因为​​QMainWindow​​​与​​QWidget​​并不完全相同,它们分别有各自的应用场景。

QWidget通常是其他​Gui​元件(如: ​QLabel​)的基础类,它可以自己形成一个窗口,或者是一个布局的一部分,也可以是一个继承的子类或者父类的成员。
​​QMainWindow是一个简便的应用类,他有很多内置的特性,比如状态栏(在我们前面的​PyQt5​框架中也有提到),工具栏和菜单。

所以在例子​​1​​​中我们创建的是状态栏元件,因此我们需要从​​QMainWindow​​​类中继承,如果替换为​​QWidget​​,则无法正常显示,可以自行尝试。

同理在例子​​2​​​中,如果我们需要从​​QWidget​​​中继承,如果我们从​​QMainWindow​​​类中继承则无法正常显示,因为​​QMainWindow​​​不支持​​QListWidget​​​以及​​QDialog​​元件。

码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~


举报

相关推荐

0 条评论