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())