一、属性和方法
知识点待总结
二、笔记相关代码
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow,QWidget, QHBoxLayout,QVBoxLayout,QGridLayout,QFormLayout, \
QPushButton,QLabel,QCheckBox,QLineEdit
from PyQt5.QtCore import Qt
class MyWin(QMainWindow):
def __init__(self):
super().__init__()
self.resize(600, 500)
self.setWindowTitle('四种布局')
self.bar1=self.menuBar()
self.menu1=self.bar1.addMenu('布局类型')
f1 = self.menu1.addAction('水平布局')
f1.triggered.connect(self.HBoxLayout)
f2 = self.menu1.addAction('垂直布局')
f2.triggered.connect(self.VBoxLayout)
f3 = self.menu1.addAction('网格布局')
f3.triggered.connect(self.GridLayout)
f4 = self.menu1.addAction('表单布局')
f4.triggered.connect(self.FormLayout)
self.bar2=self.menuBar()
self.menu2=self.bar2.addMenu('属性方法')
g1 = self.menu2.addAction('设置对齐方式 *.setAlignment')
g2 = self.menu2.addAction('添加控件 见代码中的详细介绍')
g3 = self.menu2.addAction('添加弹簧 *.addStretch()')
g4 = self.menu2.addAction('添加布局 *.addLayout()')
g5 = self.menu2.addAction('设置父图元 *.setParent()')
self.bar3=self.menuBar()
self.menu3=self.bar3.addMenu('进阶知识')
j1=self.menu3.addAction('遍历布局控件')
j1.triggered.connect(self.BL)
self.button1 = QPushButton('按钮1')
self.button2 = QPushButton('按钮2')
self.button3 = QPushButton('按钮3')
self.label1 = QLabel('姓名')
self.label2 = QLabel('年龄')
self.label3 = QLabel('学历')
self.LineEdit1=QLineEdit()
self.LineEdit2 = QLineEdit()
self.LineEdit3 = QLineEdit()
self.checkbox1=QCheckBox()
self.checkbox2 = QCheckBox()
def HBoxLayout(self):
self.Child_Widget_H=QWidget()
self.Child_Widget_H.resize(self.width(),self.height())
self.Child_Widget_H.setWindowTitle('水平布局')
# 1.创建水平布局
self.HLay=QHBoxLayout()
self.Child_Widget_H.setLayout(self.HLay)
# 2.向布局中添加控件
self.HLay.addWidget(self.button1)
self.HLay.addWidget(self.button2)
self.HLay.addWidget(self.button3)
# 3.设置对齐方式
self.HLay.setAlignment(Qt.AlignBottom)
'''
参数值的含义:
Qt.AlignLeft(左对齐)
Qt.AlignHCenter(水平居中对齐)
Qt.AlignRight(右对齐)
Qt.AlignTop(顶部对齐)
Qt.AlignVCenter(垂直居中对齐)
Qt.AlignBottom(底部对齐)
'''
self.Child_Widget_H.show()
def VBoxLayout(self):
self.Child_Widget_V=QWidget()
self.Child_Widget_V.resize(self.width(),self.height())
self.Child_Widget_V.setWindowTitle('水平布局')
# 1.创建水平布局
self.VLay=QVBoxLayout()
self.Child_Widget_V.setLayout(self.VLay)
# 2.向布局中添加控件
self.VLay.addWidget(self.button1)
self.VLay.addWidget(self.button2)
self.VLay.addWidget(self.button3)
self.Child_Widget_V.show()
def GridLayout(self):
self.Child_Widget_G=QWidget()
self.Child_Widget_G.resize(self.width(),self.height())
self.Child_Widget_G.setWindowTitle('水平布局')
# 1.创建水平布局
GLay=QGridLayout()
self.Child_Widget_G.setLayout(GLay)
# 2.向布局中添加控件
# 添加第0行控件,0行是我们平时认为的第1行
GLay.addWidget(self.button1,0,0)
GLay.addWidget(self.LineEdit1,0,1)
GLay.addWidget(self.checkbox1,0,2)
# 添加第1行控件,1行是我们平时认为的第2行
GLay.addWidget(self.button2,1,0)
GLay.addWidget(self.LineEdit2,1,1)
GLay.addWidget(self.checkbox2,1,2)
# 添加第2行控件
GLay.addWidget(self.button3,2,0,1,3,Qt.AlignRight)
'''
添加控件的方法
GLay.addWidget()
参数:
第1个参数 a0: Optional[QWidget]:添加的内容,可以是文本或者是widget控件;
第2个参数 row: int:所在行;
第3个参数 column: int:所在列;
第4个参数 rowSpan: int:合并几行;
第5个参数 columnSpan: int:合并几列;
第6个参数 alignment:对齐方式
'''
self.Child_Widget_G.show()
def FormLayout(self):
self.Child_Widget_F=QWidget()
self.Child_Widget_F.resize(self.width(),self.height())
self.Child_Widget_F.setWindowTitle('水平布局')
# 1.创建水平布局
FLay=QFormLayout()
self.Child_Widget_F.setLayout(FLay)
# 2.向布局中添加控件,即向表单布局中添加行
FLay.addRow(self.label1,self.LineEdit1)
FLay.addRow(self.label2, self.LineEdit2)
FLay.addRow(self.label3, self.LineEdit3)
self.Child_Widget_F.show()
print('表单布局')
def BL(self):
print('遍历布局')
self.Child_Widget1=QWidget()
self.Child_Widget1.resize(self.width(),self.height())
self.Child_Widget1.setWindowTitle('水平布局')
# 1.创建水平布局
HLay=QHBoxLayout()
self.Child_Widget1.setLayout(HLay)
# 2.向布局中添加控件
HLay.addWidget(self.button1)
HLay.addWidget(self.button2)
HLay.addWidget(self.button3)
# 3.遍历布局中的控件
for i in range(HLay.count()):
item = HLay.itemAt(i)
widget = item.widget()
print(f"构件: {widget}")
'''
QHBoxLayout 的 itemAt(index) 方法用于获取指定索引位置的布局项(QLayoutItem)。如果索引超出了布局项的范围,则返回 None。
item的属性有:
item.widget() 布局项对应的控件
item.layout() 布局项对应的子布局
该方法的用途:
在QTableWidget单元格中,添加Widget控件,在其设置布局并向布局中添加如QCheckBox控件并在布局中设置居中,使用
QWidget.layout().itemAt().widget(),可以获取QTableWidget单元格中QCheckBox对象,并设置其属性
'''
self.Child_Widget1.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWin()
w.show()
app.exec()
'''
应用布局的步骤
1.定义布局
2.使用布局
3.设置布局
注:2,3步顺序可以颠倒。
'''