pyqt5布局设置
在Qt布局中分为四个大类
- QBoxLayout
- QGridLayout
- QFormLayout
- QStackedLayout
一、QBoxLayout(盒子布局)
垂直布局
相关代码与解析如下:
import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
def __init__(self):
#构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
super().__init__()
#确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
self.resize(400,400)
#将窗口的初始大小设置为400x400像素
self.setWindowTitle("垂直布局")
#将窗口名字设置为“垂直布局”
layout = QVBoxLayout()
#创建一个垂直布局对象
btn1= QPushButton('按钮1')
#创建按钮1
layout.addWidget(btn1)
# 将按钮1添加到布局中
layout.addStretch(1)
# 添加一个垂直伸缩空间,占用1个单位的垂直空间
btn2 = QPushButton('按钮2')
# 创建按钮2
layout.addWidget(btn2)
# 将按钮2添加到布局中
layout.addStretch(2)
# 添加一个垂直伸缩空间,占用2个单位的垂直空间
btn3 = QPushButton('按钮3')
# 创建按钮3
layout.addWidget(btn3)
# 将按钮3添加到布局中
layout.addStretch(3)
# 添加一个垂直伸缩空间,占用3个单位的垂直空间
self.setLayout(layout)
#将一个垂直布局管理器layout分配给MyWindow类的对象,这将使窗口内的控件按照垂直布局进行排列。
if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
app = QApplication(sys.argv)
#创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
w=MyWindow()
#意味着你可以使用变量w来引用和操作这个窗口
w.show()
#显示窗口
app.exec_()
#用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。
运行窗口如下:
垂直+水平布局
接下来将实现一个窗口垂直+水平布局同时存在,大概思想就是嵌套代码和解析如下:
import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout,QHBoxLayout,QGroupBox,QRadioButton
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
def __init__(self):
#构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
super().__init__()
#确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
self.init_ui()
#初始化用户界面(UI)中的各种部件和设置。用于在创建窗口或部件的时候执行一些初始化操作,以确保UI的正确设置
def init_ui(self):
self.resize(400,400)
#将窗口的初始大小设置为400x400像素
self.setWindowTitle("垂直+水平布局")
#将窗口名字设置为“垂直+水平布局”
external= QVBoxLayout()
#创建一个最外层垂直布局对象
hobby_box=QGroupBox('爱好')
#创建一个控件组,名为hobby_box,可以添加多个按钮
v_layout=QVBoxLayout()
#设置三个爱好垂直摆放
btn1= QRadioButton('彩鳞')
btn2 = QRadioButton('小医仙')
btn3 = QRadioButton('熏儿')
#创建3个爱好“按钮”123
v_layout.addWidget(btn1)
v_layout.addWidget(btn2)
v_layout.addWidget(btn3)
# 将按钮1,2,3添加到v_layout中
hobby_box.setLayout(v_layout)
#将v_layout添加到hobby_box中
gender_box=QGroupBox('性别')
# 创建一个控件组,名为gender_box,可以添加多个按钮
h_layout=QHBoxLayout()
# 设置两个性别水平摆放
btn4= QRadioButton('男')
btn5 = QRadioButton('女')
# 创建俩个“性别”按钮4,5
h_layout.addWidget(btn4)
h_layout.addWidget(btn5)
# 将按钮4,5添加到h_layout中
gender_box.setLayout(h_layout)
# 将v_layout添加到gender_box中
external.addWidget(hobby_box)
external.addWidget(gender_box)
#将hobby_box,gender_box中的内容添加到external中
self.setLayout(external)
#设置窗口显示为external窗口
if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
app = QApplication(sys.argv)
#创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
w=MyWindow()
#意味着你可以使用变量w来引用和操作这个窗口
w.show()
#显示窗口
app.exec_()
#用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。
窗口图片:
一、QGridLayout(九宫格布局)
设计了一个计算器的界面,代码和解析如下:
import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout,QHBoxLayout,QGroupBox,QRadioButton,QGridLayout,QLineEdit
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
def __init__(self):
#构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
super().__init__()
#确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
self.init_ui()
#初始化用户界面(UI)中的各种部件和设置。用于在创建窗口或部件的时候执行一些初始化操作,以确保UI的正确设置
def init_ui(self):
self.resize(400,400)
#将窗口的初始大小设置为400x400像素
self.setWindowTitle("计算器")
#将窗口名字设置为“计算器”
data = {
0:['7','8','9','+','('],
1:['4','5','6','-',')'],
2:['1','2','3','*','<'],
3:['0','.','=','/','c'],
}
#准备九宫格要用到的数据
external= QVBoxLayout()
#创建一个最外层垂直布局对象
edit=QLineEdit()
#创建一个编辑框
edit.setPlaceholderText('请输入内容')
#设置了占位文本为 "请输入内容"
external.addWidget(edit)
# 将edit添加到external中
grid = QGridLayout()
#设置一个九宫格布局
for line_number,line_data in data.items():
#循环遍历了 data 字典中的每一行数据,其中 line_number 是行号,line_data 是行数据。
for col_number,number in enumerate(line_data):
#循环使用 enumerate 函数遍历了每一列的数据,其中 col_number 是列号,number 是数据。
btn =QPushButton(number)
#创建一个名为 btn 的按钮控件,并将其文本设置为 number。number 是数据中的值,将显示在按钮上。
grid.addWidget(btn,line_number,col_number)
#line_number 和 col_number 来指定按钮应该放置的行和列
external.addLayout(grid)
# 将grid添加到external中
self.setLayout(external)
#设置窗口显示为external窗口
if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
app = QApplication(sys.argv)
#创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
w=MyWindow()
#意味着你可以使用变量w来引用和操作这个窗口
w.show()
#显示窗口
app.exec_()
#用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。
运行窗口图片
一、FormlLayout(表单布局)
制作了一个简单的登陆界面,代码与解析如下
import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtCore import Qt
#设置窗口的标题栏图标、文本对齐方式、鼠标光标形状、键盘事件处理等等
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout,QHBoxLayout,QGroupBox,QRadioButton,QGridLayout,QLineEdit, QFormLayout
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
def __init__(self):
#构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
super().__init__()
#确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
self.init_ui()
#初始化用户界面(UI)中的各种部件和设置。用于在创建窗口或部件的时候执行一些初始化操作,以确保UI的正确设置
def init_ui(self):
self.resize(400,400)
#将窗口的初始大小设置为400x400像素
self.setWindowTitle("登录")
#将窗口名字设置为“计算器”
external= QVBoxLayout()
#创建一个最外层垂直布局对象
form_layout = QFormLayout()
#创建一个表单布局器
edit=QLineEdit()
#创建一个编辑框
edit.setPlaceholderText('请输入账号')
#设置了占位文本为 "请输入账号"
form_layout.addRow('账号:',edit)
#表单布局中添加一行。通常需要两个参数:一个标签和一个小部件本代码中,标签是字符串'账号:',小部件由变量edit表示。
edit2 = QLineEdit()
# 创建一个编辑框
edit2.setPlaceholderText('请输入密码')
# 设置了占位文本为 "请输入密码"
form_layout.addRow('密码:', edit2)
# 表单布局中添加一行。通常需要两个参数:一个标签和一个小部件本代码中,标签是字符串'密码:',小部件由变量edit2表示。
external.addLayout(form_layout)
# 将form_layout添加到external中
bin=QPushButton('登录')
#创建登录按钮
external.addWidget(bin,alignment=Qt.AlignCenter)
#将按钮加入到external中,并设置对齐方式
self.setLayout(external)
#设置窗口显示为external窗口
if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
app = QApplication(sys.argv)
#创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
w=MyWindow()
#意味着你可以使用变量w来引用和操作这个窗口
w.show()
#显示窗口
app.exec_()
#用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。
窗口图片
一、StackedLayout(抽屉布局)
提供了多页面切换的布局但每次只能看到一个页面
import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtCore import Qt
#设置窗口的标题栏图标、文本对齐方式、鼠标光标形状、键盘事件处理等等
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout,QHBoxLayout,QGroupBox,QRadioButton,QGridLayout,QLineEdit, QFormLayout,QApplication,QLabel,QStackedLayout
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class Window1(QWidget):
def __init__(self):
super(Window1, self).__init__()
QLabel('新闻联播',self)
self.setStyleSheet('background-color:green;')
class Window2(QWidget):
def __init__(self):
super(Window2, self).__init__()
QLabel('中国财经',self)
self.setStyleSheet('background-color:blue;')
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
def __init__(self):
#构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
super().__init__()
#确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
self.create_stacked_layout()
#创建抽屉布局器
self.init_ui()
#初始化用户界面(UI)中的各种部件和设置。用于在创建窗口或部件的时候执行一些初始化操作,以确保UI的正确设置
def create_stacked_layout(self):
#创建抽屉布局函数
self.stacked_layout=QStackedLayout()
win1=Window1()
win2= Window2()
#创建两个widght
self.stacked_layout.addWidget(win1)
self.stacked_layout.addWidget(win2)
#将创建的两个widget添加到抽屉布局中
def init_ui(self):
self.resize(400,400)
#将窗口的初始大小设置为400x400像素
external = QVBoxLayout()
# 创建一个最外层垂直布局对象
self.setWindowTitle("抽屉布局器")
#将窗口名字设置为“抽屉布局器”
widget=QWidget()
widget.setLayout(self.stacked_layout)
widget.setStyleSheet('background-color:grey;')
#设置一个子窗口,并将抽屉布局器添加其中
btn1=QPushButton('cctv1')
btn2 = QPushButton('cctv2')
#创建两个按钮
btn1.clicked.connect(self.btn1_clicked)
btn2.clicked.connect(self.btn2_clicked)
#给按钮添加点击事件
external.addWidget(widget)
external.addWidget(btn1)
external.addWidget(btn2)
#将控件加入到布局器中
self.setLayout(external)
#设置窗口显示为external窗口
def btn1_clicked(self):
self.stacked_layout.setCurrentIndex(0)
#设置抽屉布局器当前索引值,就是可以切换到显示哪个窗口
def btn2_clicked(self):
self.stacked_layout.setCurrentIndex(1)
#设置抽屉布局器当前索引值,就是可以切换到显示哪个窗口
if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
app = QApplication(sys.argv)
#创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
w=MyWindow()
#意味着你可以使用变量w来引用和操作这个窗口
w.show()
#显示窗口
app.exec_()
#用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。
图片如下:
OK也不知道我写清楚了没有