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_())
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_())
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_())
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_())
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_())
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_())
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_())
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_())
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_())
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_())