zoukankan      html  css  js  c++  java
  • 【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 ,它貌似无法直接添加组件,需要先设置一个布局,再将组件添加入布局才行。

  • 相关阅读:
    在Codeblocks下配置GoogleTest单元测试工具
    自制贪吃蛇游戏中的几个“大坑”
    贪吃蛇“大作战”(进阶篇)
    贪吃蛇“大作战”(终结篇)
    贪吃蛇“大作战”(六)
    贪吃蛇“大作战”(五)
    贪吃蛇“大作战”(四)
    贪吃蛇“大作战”(三)
    小心!选择的陷阱
    贪吃蛇“大作战”(二)
  • 原文地址:https://www.cnblogs.com/jmtm/p/9772572.html
Copyright © 2011-2022 走看看