【PyQt5 学习记录】003:水平布局和获取屏幕尺寸

 1 #!/usr/bin/python3
 2 # -*- coding:utf-8 -*-
 3 
 4 import sys
 5 from PySide2.QtWidgets import (QApplication,
 6                                QWidget,
 7                                QLabel,
 8                                QDesktopWidget,
 9                                QGroupBox,
10                                QVBoxLayout)
11 
12 
13 class MainWindow(QWidget):
14     def __init__(self):
15         super().__init__()
16 
17         self.screen_size = QLabel(u'尺寸:', self)
18         # 创建一个水平布局
19         v_box_screen = QVBoxLayout()
20         v_box_screen.addWidget(self.screen_size)
21 
22         # 创建一个组件组
23         group_screen = QGroupBox('屏幕:', self)
24         group_screen.setGeometry(10, 10, 120, 50)
25         group_screen.setLayout(v_box_screen)
26 
27         self.window_position = QLabel(u'坐标:', self)
28         self.window_size = QLabel(u'尺寸:', self)
29         # 创建一个水平布局
30         v_box_window = QVBoxLayout()
31         v_box_window.addWidget(self.window_position)
32         v_box_window.addWidget(self.window_size)
33 
34         # 创建一个组件组
35         group_window = QGroupBox('窗口:', self)
36         group_window.setGeometry(10, 70, 120, 80)
37         group_window.setLayout(v_box_window)
38 
39         self.resize(300, 200)
40         self.setWindowTitle('Simple Window')
41 
42         self.information()
43 
44     def information(self):
45         desktop = QDesktopWidget()
46         screen_width = desktop.screenGeometry().width()
47         screen_height = desktop.screenGeometry().height()
48 
49         self.screen_size.setText(u'尺寸:' + str(screen_width) + u' * ' + str(screen_height))
50 
51     def moveEvent(self, *args, **kwargs):
52         """重写移动函数"""
53         window_x = self.geometry().x()
54         window_y = self.geometry().y()
55         self.window_position.setText(u'坐标:' + str(window_x) + u' * ' + str(window_y))
56 
57     def resizeEvent(self, *args, **kwargs):
58         """重写改变尺寸函数函数"""
59         window_width = self.geometry().width()
60         window_height = self.geometry().height()
61         self.window_size.setText(u'尺寸:' + str(window_width) + u' * ' + str(window_height))
62 
63 
64 if __name__ == '__main__':
65     app = QApplication()
66     window = MainWindow()
67     window.show()
68     sys.exit(app.exec_())

效果如下图:

因为想到让显示的窗口居中,进而想到获取显示屏和窗口的大小。

窗口大小很简单,QWidget.geometry() 就可以获得当前窗口的坐标和尺寸,要注意的是在 window.show() 之前获取是不准的,需要在窗口显示完之后获取才能得到准确的坐标和尺寸。

显示屏的话可以使用 QDesktopWidget.screenGeometry,文档里说是:

The PySide2.QtWidgets.QDesktopWidget class provides access to screen information on multi-head systems.

此外,我为了好看,使用了 QGroupBox ,它貌似无法直接添加组件,需要先设置一个布局,再将组件添加入布局才行。

原文地址:https://www.cnblogs.com/jmtm/p/9772572.html