跳至正文
View Categories

< 1 min read

主要内容 #

  1. 绝对定位介绍

完成效果 #

完成本节课程,能学会在程序中指定每个控件的位置和大小(以像素为单位)。

收获 #

学习完本节内容,我们会了解如何在GUI里对控件进行绝对定位的布局

1.绝对定位介绍 #

在一个GUI程序里,布局是一个很重要的方面。布局就是如何管理应用中的元素和窗口。有两种方式可以搞定:绝对定位和PyQt5的layout类。
每个程序都是以像素为单位区分元素的位置,衡量元素的大小。所以我们完全可以使用绝对定位搞定每个元素和窗口的位置。但是这也有局限性:

  • 元素不会随着我们更改窗口的位置和大小而变化。
  • 不能适用于不同的平台和不同分辨率的显示器。
  • 更改应用字体大小会破坏布局。
  • 如果我们决定重构这个应用,需要全部计算一下每个元素的位置和大小。

以下就是绝对定位的应用:

import sys
from PyQt5.QtWidgets import QWidget, QLabel, QApplication, QLineEdit, QProgressBar

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()


    def initUI(self):
        lbl1 = QLabel('Dashima ', self)
        # 使用move()方法定位了每一个元素,使用x、y坐标。x、y坐标的原点是程序的左上角,单位为像素。
        lbl1.move(15, 10)  # 这个元素的左上角就在这个程序的左上角开始的(15, 10)的位置

        lbl2 = QLabel('tutorials', self)
        lbl2.move(35, 40)

        lbl3 = QLabel('for programmers', self)
        lbl3.move(55, 70)        

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Absolute')    
        self.show()
    
app = QApplication(sys.argv)    # 创建应用程序
ex = Example()  # 创建窗口对象
sys.exit(app.exec_())   # 设置关闭窗口后结束进程

拓展练习:尝试修改上述三个QLabel的坐标。

小结 #

  • 学习了如何使用绝对定位修改控件的位置。

习题 #

  1. 习题1:尝试创建其他控件,比如QProgressBar,QLineEdit,然后用绝对定位修改它们的位置。