上QQ阅读APP看书,第一时间看更新
1.3.1 使用move()方法布局
最简单的布局方式就是使用move()方法来规定各个控件在窗口中的位置。在使用这个方法前,我们先来简单了解一下PyQt的坐标体系,如图1-10所示。
图1-10 PyQt的坐标体系
不管是窗口还是控件,它们的坐标原点(以及锚点)都在左上角,而且向右为x轴正方向,向下为y轴正方向。也就是说,如果我们要调用move()方法把一个QLabel控件放在坐标为(50, 100)的窗口位置上,其实就是规定QLabel控件左上角在窗口上的位置,如图1-11所示。
图1-11 QLabel控件在(50, 100)坐标处
我们现在可以实际操作一下,示例代码1-6通过move()方法把QLabel放在了窗口上的其他位置。
示例代码1-6
import sys
from PyQt5.QtWidgets import *
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.resize(200, 200) # 1
label_1 = QLabel('Label 1', self)
label_2 = QLabel('Label 2', self)
label_1.move(-20, 0) #注释2开始
label_2.move(50, 100) #注释2结束
if __name__ == '__main__':
app = QApplication([])
window = Window()
window.show()
sys.exit(app.exec())
运行结果如图1-12所示。
图1-12 QLabel控件的位置
代码解释:
#1 调用resize()方法将窗口大小设置为宽200像素,长200像素。
#2 调用move()方法分别设置两个QLabel控件的位置。这里将label_1控件对象设置在了坐标为(−20, 0)的位置上。之前说过,窗口的左上角为坐标原点(0, 0),QLabel控件的坐标为(−20, 0)也就意味着控件还往原点左侧移动了一些,这样的话一部分文本就会被遮住。
使用move()方法可以快速进行布局,但是当控件数量很多时,该方法就不再方便了。因为我们要计算很多个坐标,而且万一其中一个控件的位置要改变,就可能会影响其他所有控件的位置,牵一发而动全身的方法是不推荐的。另外,使用move()方法还有一个弊端——坐标都是固定的。也就是说,当我们拉伸窗口时,控件的位置固定不变,并不能够自适应。为了解决这些问题,我们就需要用到PyQt中的布局管理器。