不知道大家有没有相同的困惑,就是在使用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()
运行后的结果如下图所示:
但是这里有一个有趣的现象,在例子2
中,当我们使用class App
从QMainWindow
类继承时,Gui
界面就无法正常显示了,这是因为QMainWindow
与QWidget
并不完全相同,它们分别有各自的应用场景。
QWidget
通常是其他Gui
元件(如: QLabel
)的基础类,它可以自己形成一个窗口,或者是一个布局的一部分,也可以是一个继承的子类或者父类的成员。
QMainWindow
是一个简便的应用类,他有很多内置的特性,比如状态栏(在我们前面的PyQt5
框架中也有提到),工具栏和菜单。
所以在例子1
中我们创建的是状态栏元件,因此我们需要从QMainWindow
类中继承,如果替换为QWidget
,则无法正常显示,可以自行尝试。
同理在例子2
中,如果我们需要从QWidget
中继承,如果我们从QMainWindow
类中继承则无法正常显示,因为QMainWindow
不支持QListWidget
以及QDialog
元件。
码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~