PyQt5四大布局方式

摘要:
1.绝对布局方法“”绝对布局方法,通过从PyQt5移动“”的XY坐标方法控制控件的位置。QtWidgetsimport*importsys,mathclassabsolutelayout(QWidget):def__init__(self):super(absolutellayout,self)。__init__()自身。setWindowTitle(“绝对布局方法”)自身
1、绝对布局方式
'''
绝对布局方式,通过move的XY坐标方式来控制控件的位置
'''
from PyQt5.QtWidgets import *
import sys,math

class absolutelayout(QWidget):
def __init__(self):
super(absolutelayout,self).__init__()
self.setWindowTitle("绝对布局方式")
self.label1=QLabel("欢迎",self)
self.label1.move(15,20)

self.label2 = QLabel("欢迎",self)
self.label2.move(35, 40)

self.label3 = QLabel("欢迎",self)
self.label3.move(55, 80)

if __name__=="__main__":
app=QApplication(sys.argv)
p=absolutelayout()
p.show()
sys.exit(app.exec_())

PyQt5四大布局方式第1张2、水平盒方式QHBoxLayout()

'''
水平盒布局方式
'''
from PyQt5.QtWidgets import *
import sys,math

class hboxlayout(QWidget):
def __init__(self):
super(hboxlayout,self).__init__()
self.setWindowTitle("水平盒布局方式")
self.layout=QHBoxLayout()

self.label1=QLabel("欢迎")
self.label2 = QLabel("欢迎")
self.label3 = QLabel("欢迎")
self.label4 = QLabel("欢迎")
self.label5 = QLabel("欢迎")

self.layout.addWidget(self.label1)
self.layout.addWidget(self.label2)
self.layout.addWidget(self.label3)
self.layout.addWidget(self.label4)
self.layout.addWidget(self.label5)

# 设置水平盒布局的控件间距大小
self.layout.setSpacing(100)
self.setLayout(self.layout)

if __name__=="__main__":
app=QApplication(sys.argv)
p=hboxlayout()
p.show()
sys.exit(app.exec_())
PyQt5四大布局方式第2张
3、水平布局设置伸缩量
'''
设置控件的伸缩量
'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys, math


class absolutelayout(QWidget):
def __init__(self):
super(absolutelayout, self).__init__()
self.setWindowTitle("设置伸缩量")
self.resize(800,100)
self.layout = QHBoxLayout()

self.btn1=QPushButton("按钮1")
self.btn2= QPushButton("按钮2")
self.btn3= QPushButton("按钮3")
self.btn4 = QPushButton("按钮4")
self.btn5 = QPushButton("按钮5")

#将前五个按钮放在左边显示
self.layout.addStretch(0) #设置布局的伸缩量-默认右对齐方式
self.layout.addWidget(self.btn1)
self.layout.addWidget(self.btn2)
self.layout.addWidget(self.btn3)
self.layout.addWidget(self.btn4)
self.layout.addWidget(self.btn5)

#将第6个和第7个按钮放在右边显示
self.btn6=QPushButton("按钮6")
self.btn7=QPushButton("按钮7")
self.layout.addStretch(1)
self.layout.addWidget(self.btn6)
self.layout.addWidget(self.btn7)

self.setLayout(self.layout)

if __name__ == "__main__":
app = QApplication(sys.argv)
p = absolutelayout()
p.show()
sys.exit(app.exec_())

PyQt5四大布局方式第3张

4、水平盒方式QHBoxLayout的对齐方式
'''
水平盒布局方式控件对齐方式
'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys, math

class absolutelayout(QWidget):
def __init__(self):
super(absolutelayout, self).__init__()
self.setWindowTitle("控件对齐方式")
self.layout = QHBoxLayout()

self.label1 = QLabel("欢迎")
self.label2 = QLabel("欢迎")
self.label3 = QLabel("欢迎")
self.label4 = QLabel("欢迎")
self.label5 = QLabel("欢迎")

#设置水平盒布局的对齐方式layout.addwidget(控件,控件位置长度比例,对齐方式)
self.layout.addWidget(self.label1,2,Qt.AlignLeft | Qt.AlignTop)
self.layout.addWidget(self.label2,1,Qt.AlignLeft | Qt.AlignTop)
self.layout.addWidget(self.label3,1,Qt.AlignLeft | Qt.AlignBottom)
self.layout.addWidget(self.label4,1,Qt.AlignLeft | Qt.AlignBottom)
self.layout.addWidget(self.label5,1,Qt.AlignLeft)

# 设置水平盒布局的控件间距大小
self.layout.setSpacing(20)
self.setLayout(self.layout)

if __name__ == "__main__":
app = QApplication(sys.argv)
p = absolutelayout()
p.show()
sys.exit(app.exec_())
PyQt5四大布局方式第4张
5、垂直盒方式QVBoxLayout()
'''
垂直盒布局方式
'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys, math

class vboxlayout(QWidget):
def __init__(self):
super(vboxlayout, self).__init__()
self.setWindowTitle("垂直盒布局方式")
self.resize(100,2000)
self.layout = QVBoxLayout()

self.label1 = QPushButton("欢迎")
self.label2 = QPushButton("欢迎")
self.label3 = QPushButton("欢迎")
self.label4 = QPushButton("欢迎")
self.label5 = QPushButton("欢迎")

#设置垂直盒布局的对齐方式layout.addwidget(控件,控件位置长度比例,对齐方式)
self.layout.addWidget(self.label1)
self.layout.addWidget(self.label2)
self.layout.addWidget(self.label3)
self.layout.addWidget(self.label4)
self.layout.addWidget(self.label5)

# 设置垂直盒布局的控件间距大小
self.layout.setSpacing(20)
self.setLayout(self.layout)


if __name__ == "__main__":
app = QApplication(sys.argv)
p =vboxlayout()
p.show()
sys.exit(app.exec_())
PyQt5四大布局方式第5张
6、将按钮永远放在窗口右下角
'''
将按钮永远放在窗口的右下角
'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys, math

class rightbutton(QWidget):
def __init__(self):
super(rightbutton, self).__init__()
self.setWindowTitle("按钮放在窗口的右下角")
self.resize(400,300)

ok=QPushButton("确定")
cancel=QPushButton("取消")

h=QHBoxLayout()
h.addStretch(1)
h.addWidget(ok)
h.addWidget(cancel)

v=QVBoxLayout()
bt1=QPushButton("按钮1")
bt2 = QPushButton("按钮2")
bt3 = QPushButton("按钮3")

v.addStretch(0) #放在上面
v.addWidget(bt1)
v.addWidget(bt2)
v.addWidget(bt3)

v.addStretch(1) #始终保持在放在右下角
v.addLayout(h)
self.setLayout(v)

if __name__ == "__main__":
app = QApplication(sys.argv)
p = rightbutton()
p.show()
sys.exit(app.exec_())
PyQt5四大布局方式第6张

7、栅格布局方式
QGridLayout()

#栅格布局:实现计算器
'''
实现计算器功能
'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys, math

class calcu(QWidget):
def __init__(self):
super(calcu, self).__init__()
self.setWindowTitle("栅格布局实现计算器UI")
self.resize(400,300)
grid=QGridLayout()

names=["CLS","Back","","Close",
"7","8","9","/",
"4","5","6","*",
"1","2","3","-",
"0",".","=","+"]
positions=[(i,j) for i in range(5) for j in range(4)]

for position,name in zip(positions,names): #采用zip组合循环的方式来进行对象的匹配
if name=="":
continue
print(position)
print(name)
b=QPushButton(name)
#grid.addWidget(b,position[0],position[1])
#放置控件名称,位置坐标x,位置坐标y
      grid.addWidget(b, *position)  #  *p表示将元组(x,y)转换为x y 


self.setLayout(grid)

if __name__ == "__main__":
app = QApplication(sys.argv)
p =calcu()
p.show()
sys.exit(app.exec_())
PyQt5四大布局方式第7张
8、栅格布局2
#栅格布局:实现表单UI设计
'''
实现表单设计
'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys, math

class table(QWidget):
def __init__(self):
super(table, self).__init__()
self.setWindowTitle("栅格布局实现表单UI设计")
#self.resize(400,300)
grid=QGridLayout()

label1=QLabel("标题")
label2=QLabel("作者")
label3=QLabel("内容")

l1=QLineEdit()
l2=QLineEdit()
l3=QTextEdit()
grid.setSpacing(10)

grid.addWidget(label1,1,0)
grid.addWidget(l1,1,1)

grid.addWidget(label2,2,0)
grid.addWidget(l2,2,1)

grid.addWidget(label3,3,0,5,1,Qt.AlignCenter) #占据伸缩比为5行1列
grid.addWidget(l3,3,1,5,1) #占据比例为5行1列

self.setLayout(grid)

if __name__ == "__main__":
app = QApplication(sys.argv)
p =table()
p.show()
sys.exit(app.exec_())
PyQt5四大布局方式第8张
9、
表单布局QFormLayout()
'''
实现表单设计
'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys, math

class tab(QWidget):
def __init__(self):
super(tab, self).__init__()
self.setWindowTitle("表单布局")
form=QFormLayout()

label1=QLabel("标题")
label2=QLabel("作者")
label3=QLabel("内容")

l1=QLineEdit()
l2=QLineEdit()
l3=QTextEdit()

# 表单布局直接使用addrow(函数)进行表单布局的放置
form.addRow(label1,l1)
form.addRow(label2,l2)
form.addRow(label3,l3)
self.setLayout(form)

if __name__ == "__main__":
app = QApplication(sys.argv)
p =tab()
p.show()
sys.exit(app.exec_())
PyQt5四大布局方式第9张

10、拖动控件边界QSplitter控件
# 拖动控件之间的边界QSplitter控件
'''
改变不同控件之间的边界
'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys, math

class splitter(QWidget):
def __init__(self):
super(splitter, self).__init__()
self.setWindowTitle("拖动控件之间的边界")
self.setGeometry(300,300,300,200)

topleft=QFrame()
topleft.setFrameShape(QFrame.StyledPanel)

bottom = QTextEdit("编辑器")

#设置所包含的控件之间可以水平拖动,基本设置为水平布局
splitter1=QSplitter(Qt.Horizontal)

text=QTextEdit("代码区")
splitter1.addWidget(topleft)
splitter1.addWidget(text)

#设置默认的控件之间的大小距离
splitter1.setSizes([100,200])

#设置所包含的控件之间可以垂直拖动,设置我垂直布局
splitter2= QSplitter(Qt.Vertical)

text = QTextEdit()
splitter2.addWidget(splitter1)
splitter2.addWidget(bottom)

h=QVBoxLayout()
h.addWidget(splitter2)
self.setLayout(h)

if __name__ == "__main__":
app = QApplication(sys.argv)
p = splitter()
p.show()
sys.exit(app.exec_())
PyQt5四大布局方式第10张

免责声明:文章转载自《PyQt5四大布局方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇强制缓存和协商缓存的区别Android pm 命令详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在PyQt中构建 Python 菜单栏、菜单和工具栏

摘要:菜单、工具栏和状态栏是大多数GUI 应用程序的常见且重要的图形组件。您可以使用它们为您的用户提供一种快速访问应用程序选项和功能的方法。 本文分享自华为云社区《Python 和 PyQt:创建菜单、工具栏和状态栏》,作者:Yuchuan。 在使用 Python 和PyQt开发图形用户界面 (GUI)应用程序时,您将使用的一些最有用和最通用的图形元素是...

pyqt 窗口的调用

关于Pyqt窗口调用的格式 正常设计两个ui文件 正常Pyuic转成.py 在唯一的 run.py 函数里这样写即可实现窗口调用 import ... from Timer2 import Ui_Form # Timer2为主ui对于py文件的名字 from TimerSetup import Ui_Form as UISetup # Timer...

PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法

对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获。setData方法是视图中各种角色数据发生更新后视图用于更新Model数据的方法,只要重写该方法就可以截获视图对Model数据的修改。 不过网上介绍的思路都是从QAbstractTableMode...

pyqt5在textBrowser添加文本并自动滑动到底

pyqt5在textBrowser添加文本并自动滑动到底 说明: 1、按下按钮pushButton,把单行文本框lineEdit里的内容循环不断的添加到多行文本展示框textBrowser。2、必须要用线程做这件事,不然主程序会卡死。3、必须添加sleep(),不然主程序会卡死。4、用函数的闭包做这样的事情,效果很好。    信号与槽的连接: 1 s...

[ PyQt入门教程 ] PyQt5中多线程模块QThread使用方法

本文主要讲解使用多线程模块QThread解决PyQt界面程序唉执行耗时操作时,程序卡顿出现的无响应以及界面输出无法实时显示的问题。用户使用工具过程中出现这些问题时会误以为程序出错,从而把程序关闭。这样,导致工具的用户使用体验不好。下面我们通过模拟上述出现的问题并讲述使用多线程QThread模块解决此类问题的方法。 PyQt程序卡顿和无法实时显示问题现象 使...

基于pyqt的电子时钟

基于pyqt的电子时钟 介绍 通过电子时钟完成了基于pyqt的一个综合项目,其中包括UI界面与逻辑代码分离设计的思想,更新界面在主线程中完成,逻辑代码在子线程中完成。子线程的处理结果通过信号发送给主线程进行更新界面。子线程通过继承主线程来访问主线程的共享资源,主线程通过对象方法来访问子线程的资源。涉及多线程和线程休眠与唤醒等功能。 软件架构 操作系统...