在自学PyQt5(一)|用两种编程风格创建一个基础窗口中,我们对窗口的初始化与循环方法做了了解,并使用了一些基础的对窗口设置的方法,也了解了使用PyQt5的代码风格。这篇文章中我们记录一些PyQt5窗口布局管理的内容。
文章目录
一. 绝对布局
1. 绝对布局的例子
对窗口布局最简单的方法是绝对布局法,即通过指定像素的方法进行控件布局。我们来看一个例子:
import sys
from PyQt5.QtWidgets import QApplication,\
QWidget,\
QLabel
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setMyLabel()
self.setMyWindow()
pass
def setMyLabel(self):
lbl = QLabel('start in the middle',self)
lbl.move(230,250)
pass
def setMyWindow(self):
self.resize(600,600)
self.move(0,0)
self.show()
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWindow()
sys.exit(app.exec_())
在这个例子中,我们通过QLabel函数向窗口中添加了一个标签控件,并通过move方法指定了标签的位置,具体效果如下图所示:
但是当我将窗口放到最大时,原本在窗口正中的标签改变了位置:
2. 绝对布局的限制
绝对布局具有以下特点:
- 当我们调整窗口大小时,控件的大小和位置不变
- 使用绝对布局的GUI程序窗口显示的布局在不同应用程序上看起来不一样
- 改变字体可能引起绝对布局窗口位置的改变
以上特点造成了当我们的窗口使用绝对布局时,如果我们改变了窗口的某一个布局,我们就必须重做原来的布局。
可见,绝对布局的方法虽然简单,但不具备移植性、不是很实用。
二. 布局类
1. 框布局
(1). 代码示例
import sys
from PyQt5.QtWidgets import QApplication,\
QWidget,\
QPushButton,\
QHBoxLayout,\
QVBoxLayout
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setMyButton()
self.setMyWindow()
pass
def setMyButton(self):
button_1 = QPushButton('1')
button_2 = QPushButton('2')
button_3 = QPushButton('3')
hbox = QHBoxLayout()
hbox.addStretch(0)
hbox.addWidget(button_1)
hbox.addStretch(1)
hbox.addWidget(button_2)
hbox.addStretch(1)
hb