四種布局方式:水平,垂直,網格,窗體布局。以及兩種布局方法:addLayout和addWidget。
不過窗體布局QFormLayout幾乎不用,其他三種就足夠了。
來個例子(模仿windows選擇文件的布局):
代碼:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.setWindowTitle("請選擇文件/文件夾")
self.resize(700, 500)
self.initUI()
self.show()
def initUI(self):
Layout = QGridLayout(self)
#定義全局布局,注意參數self
g = QGridLayout()
v = QVBoxLayout()
h = QHBoxLayout()
# 定義其他兩種種布局
label1 = QLabel("快速訪問")
label2 = QLabel("桌面")
label3 = QLabel("庫")
label4 = QLabel("我的電腦")
label7 = QLabel("文件名(N):")
label6 = QLabel("文件類型(T):")
label5 = QLabel("網絡")
btn1 = QPushButton("選擇")
btn1.resize(100,10)
btn2 = QPushButton("取消")
combo1 = QComboBox()
combo2 = QComboBox()
combo2.addItem("所有文件(*.*)")
#定義各種控件
splitter = QSplitter()
model = QFileSystemModel()
model.setRootPath(QDir.currentPath())
tree = QTreeView(splitter)
tree.setModel(model)
#tree.setRootIndex(model.index(QDir.currentPath()))
v.addWidget(label1)
v.addWidget(label2)
v.addWidget(label3)
v.addWidget(label4)
v.addWidget(label5)
g.addWidget(label7, 0, 0)
g.addWidget(label6, 1, 0)
g.addWidget(combo1, 0, 1)
g.addWidget(combo2, 1, 1)
g.addWidget(btn1, 0, 2)
g.addWidget(btn2, 1, 2)
h.addWidget(tree)
#把控件加入布局
Layout.addLayout(v, 0, 0)
Layout.addLayout(h, 0, 1)
Layout.addLayout(g, 1, 1,)
#把布局加入總的布局方式
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
sys.exit(app.exec_())
參考:
http://www.cnblogs.com/archisama/p/5453260.html
http://blog.csdn.net/zhulove86/article/details/52563298
http://www.linuxidc.com/Linux/2012-06/63652p12.htm