MVP Window Widget Layout#

keywords: MVP App

这是一个 Minimal viable product 的 App. 包含一个 Window, 一个 Widget 和一个 Layout. 你如果做一个新的 App, 可以复制这个代码, 然后修改成你自己的 App. 后续所有的例子都会使用这一模式.

mvp_window_widget_layout.py
 1# -*- coding: utf-8 -*-
 2
 3"""
 4一个最简单的 GUI App 的代码框架, 至少包含一个 MainWindow 和一个 MainWidget 类.
 5
 6知识点:
 7
 8- 用 ``${name}_wgt`` 表示 widget.
 9- 用 ``${name}_lay`` 表示 layout.
10- 用 ``main_wgt`` 表示主要的 widget, 也就是最外层的 widget.
11- 用 ``main_lay`` 表示主要的 layout, 也就是最外层的 layout.
12- 用 ``QtWidgets.QApplication().screen()[0].size().toTuple()`` 来获取屏幕的大小, 以便于设置窗口的位置和大小.
13"""
14
15import sys
16from PySide6 import QtWidgets
17
18
19class MainWidget(QtWidgets.QWidget):
20    def __init__(self, parent):
21        super().__init__(parent)
22        # define
23        self.label_wgt = QtWidgets.QLabel("This is a Label")
24        self.main_lay = QtWidgets.QVBoxLayout()  # Vertical Box layout
25        self.main_lay.addWidget(self.label_wgt)
26        self.setLayout(self.main_lay)
27
28
29class MainWindow(QtWidgets.QMainWindow):
30    def __init__(self):
31        super().__init__()
32        self.main_wgt = MainWidget(self)
33        self.setCentralWidget(self.main_wgt)
34        self.setGeometry(
35            int(screen_width * 0.25),  # x, at 25% of screen width
36            int(screen_height * 0.25),  # y, at 25% of screen height
37            int(screen_width * 0.5),  # w, 50% screen width
38            int(screen_height * 0.5),  # h, 50% screen height
39        )
40        self.setWindowTitle("mvp_window_widget_layout")
41        self.show()
42
43
44if __name__ == "__main__":
45    app = QtWidgets.QApplication(sys.argv)
46    screen_width, screen_height = app.screens()[0].size().toTuple()
47    main = MainWindow()
48    sys.exit(app.exec())