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 ,它貌似无法直接添加组件,需要先设置一个布局,再将组件添加入布局才行。