首页 > 编程 > Python > 正文

PyQt5每天必学之布局管理

2020-02-22 23:43:44
字体:
来源:转载
供稿:网友

在GUI编程中有一个不容忽视的部分,那就是布局管理。布局管理掌控着我们的控件在应用程序窗口如何摆放。布局管理可以通过两种方式来完成。我们可以使用绝对定位或布局类两种方法控制程序窗口中的控件位置。

绝对定位

每个控件按程序员指定的位置放置。当您使用绝对定位,我们要了解以下限制:

如果我们调整窗口的大小控件的大小和位置保持不变 在不同平台上应用程序看起来可能会不同 更改字体可能会破坏应用程序的布局 如果决定改变布局,我们必须每个控件彻底的加以修改,这是繁琐和耗时的

下面的例子就是控件的绝对坐标定位方式。

#!/usr/bin/python3# -*- coding: utf-8 -*-"""PyQt5 教程这个例子显示了在窗口中使用绝对定位的三个标签。作者:我的世界你曾经来过博客:http://blog.csdn.net/weiaitaowang最后编辑:2016年7月31日"""import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QLabelclass Example(QWidget): def __init__(self):  super().__init__()  self.initUI() def initUI(self):  lbl1 = QLabel('我的世界你曾经来过', self)  lbl1.move(15, 10)  lbl2 = QLabel('CSND博客', self)  lbl2.move(35, 40)  lbl3 = QLabel('程序员', self)  lbl3.move(55, 70)  self.setGeometry(300, 300, 250, 150)  self.setWindowTitle('绝对定位')    self.show()if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())

在我们的例子中使用的都是标签(Label)。我们通过提供x和y坐标值定位它们。坐标系的原点是控件的左上角。 x值增长是由左到右。 y值增长是从上到下。

lbl1 = QLabel('我的世界你曾经来过', self)lbl1.move(15, 10)

标签控件被放置在 x=15 和 y=10。

程序执行后

这里写图片描述

Box layout盒子布局

布局管理使用布局类的方式更加灵活、实用。它是将一个控件放在窗口中的首选方式。QHBoxLayout和QVBoxLayout分别是水平和垂直对齐控件的基本布局类。

试想一下,我们希望把两个按钮在程序的右下角。要创建这样一个布局,我们可以使用一横一纵两个框。要创造必要的空余空间,我们将增加一个拉伸因子(stretch factor)。

#!/usr/bin/python3# -*- coding: utf-8 -*-"""PyQt5 教程在这个例子中,我们在窗口的右下角放置两个按钮。作者:我的世界你曾经来过博客:http://blog.csdn.net/weiaitaowang最后编辑:2016年7月31日"""import sysfrom PyQt5.QtWidgets import (QApplication, QWidget,  QPushButton, QVBoxLayout, QHBoxLayout)class Example(QWidget): def __init__(self):  super().__init__()  self.initUI() def initUI(self):  okButton = QPushButton('确定')  cancelButton = QPushButton('取消')  hbox = QHBoxLayout()  hbox.addStretch(1)  hbox.addWidget(okButton)  hbox.addWidget(cancelButton)  vbox = QVBoxLayout()  vbox.addStretch(1)  vbox.addLayout(hbox)  self.setLayout(vbox)  self.setGeometry(300, 300, 350, 150)  self.setWindowTitle('Box布局')    self.show()if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表