這篇文章給大家分享的是有關PyQt5中布局管理的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

在GUI編程中有一個不容忽視的部分,那就是布局管理。布局管理掌控著我們的控件在應用程序窗口如何擺放。布局管理可以通過兩種方式來完成。我們可以使用絕對定位或布局類兩種方法控制程序窗口中的控件位置。
絕對定位
每個控件按程序員指定的位置放置。當您使用絕對定位,我們要了解以下限制:
如果我們調整窗口的大小控件的大小和位置保持不變
在不同平臺上應用程序看起來可能會不同
更改字體可能會破壞應用程序的布局
如果決定改變布局,我們必須每個控件徹底的加以修改,這是繁瑣和耗時的
下面的例子就是控件的絕對坐標定位方式。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
lbl1 = QLabel('我的世界你曾經(jīng)來過', self)
lbl1.move(15, 10)
lbl2 = QLabel('CSND博客', self)
lbl2.move(35, 40)
lbl3 = QLabel('程序員', self)
lbl3.move(55, 70)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('絕對定位')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())在我們的例子中使用的都是標簽(Label)。我們通過提供x和y坐標值定位它們。坐標系的原點是控件的左上角。 x值增長是由左到右。 y值增長是從上到下。
lbl1 = QLabel('我的世界你曾經(jīng)來過', self)
lbl1.move(15, 10)標簽控件被放置在 x=15 和 y=10。
程序執(zhí)行后

Box layout盒子布局
布局管理使用布局類的方式更加靈活、實用。它是將一個控件放在窗口中的選方式。QHBoxLayout和QVBoxLayout分別是水平和垂直對齊控件的基本布局類。
試想一下,我們希望把兩個按鈕在程序的右下角。要創(chuàng)建這樣一個布局,我們可以使用一橫一縱兩個框。要創(chuàng)造必要的空余空間,我們將增加一個拉伸因子(stretch factor)。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
PyQt5 教程
在這個例子中,我們在窗口的右下角放置兩個按鈕。
作者:我的世界你曾經(jīng)來過
博客:http://blog.csdn.net/weiaitaowang
最后編輯:2016年7月31日
"""
import sys
from PyQt5.QtWidgets import (QApplication, QWidget,
QPushButton, QVBoxLayout, QHBoxLayout)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
okButton = QPushButton('確定')
cancelButton = QPushButton('取消')
hbox = QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)
vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addLayout(hbox)
self.setLayout(vbox)
self.setGeometry(300, 300, 350, 150)
self.setWindowTitle('Box布局')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())該示例將兩個按鈕放在窗口的右下角。當我們調整應用程序窗口的大小時,他們是固定在右下角的。我們同時使用HBoxLayout 和QVBoxLayout布局。
okButton = QPushButton('確定')
cancelButton = QPushButton('取消')這里我們創(chuàng)建了兩個按鈕。
hbox = QHBoxLayout() hbox.addStretch(1) hbox.addWidget(okButton) hbox.addWidget(cancelButton)
我們創(chuàng)建了一個水平box布局,增加拉伸因子(addStretch),添加(addWidget)兩個按鈕。在添加兩個按鈕之前增加了一個拉伸因子,這會將兩個按鈕推到窗口右側。
vbox = QVBoxLayout() vbox.addStretch(1) vbox.addLayout(hbox)
要得到我們想要的布局,還需將橫向布局放入垂直的布局中。在垂直框上的拉伸因子會將水平框包括里面的控件推至窗口的底部。
self.setLayout(vbox)
最后,我們設置窗口的主布局。
程序執(zhí)行后

QGridLayout網(wǎng)格布局
最經(jīng)常使用的布局類是網(wǎng)格布局。這種布局將該空間分成行和列。要創(chuàng)建一個網(wǎng)格布局,我們使用QGridLayout 的類。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
PyQt5 教程
在這個例子中,我們使用網(wǎng)格布局創(chuàng)建一個計算器的框架。
作者:我的世界你曾經(jīng)來過
博客:http://blog.csdn.net/weiaitaowang
最后編輯:2016年7月31日
"""
import sys
from PyQt5.QtWidgets import (QApplication, QWidget,
QPushButton, QGridLayout)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
grid = QGridLayout()
self.setLayout(grid)
names = ['Cls', 'Bck', '', '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):
if name == '':
continue
button = QPushButton(name)
grid.addWidget(button, *position)
self.move(300, 150)
self.setWindowTitle('計算器')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())在我們的例子中,我們將創(chuàng)建的按鈕控件放在網(wǎng)格中。
grid = QGridLayout() self.setLayout(grid)
實例化 QGridLayout 并設置應用程序窗口的布局。
names = ['Cls', 'Bck', '', 'Close', '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', '=', '+',]
這是以后要用到的按鈕標簽。
positions = [(i, j) for i in range(5) for j in range(4)]
x我們創(chuàng)建了網(wǎng)格位置的列表。
for position, name in zip(positions, names): if name == '': continue button = QPushButton(name) grid.addWidget(button, *position)
創(chuàng)建按鈕并添加(addWidget)到布局中。
程序執(zhí)行后

擴展網(wǎng)格布局
窗口中的控件可以跨越網(wǎng)格中的多個列或行。在下面的例子中,我們說明這一點。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
PyQt5 教程
在這個例子中,我們使用GridLayout的跨行創(chuàng)建了一個更復雜的窗口布局。
作者:我的世界你曾經(jīng)來過
博客:http://blog.csdn.net/weiaitaowang
最后編輯:2016年7月31日
"""
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel,
QTextEdit, QLineEdit, QGridLayout)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
title = QLabel('標題')
author = QLabel('作者')
review = QLabel('評論')
titleEdit = QLineEdit()
authorEdit = QLineEdit()
reviewEdit = QTextEdit()
grid =QGridLayout()
grid.setSpacing(10)
grid.addWidget(title, 1, 0)
grid.addWidget(titleEdit, 1, 1)
grid.addWidget(author, 2, 0)
grid.addWidget(authorEdit, 2, 1)
grid.addWidget(review, 3, 0)
grid.addWidget(reviewEdit, 3, 1, 5, 1)
self.setLayout(grid)
self.setGeometry(300, 300, 350, 300)
self.setWindowTitle('評論')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())我們創(chuàng)建的程序中包含三個標簽,兩個單行文本輸入框和一個文本編輯控件,使用QGridLayout布局。
grid =QGridLayout() grid.setSpacing(10)
實例化網(wǎng)格布局和并設置設置間距。
grid.addWidget(reviewEdit, 3, 1, 5, 1)
添加一個控件到網(wǎng)格布局中,我們可以為這個控件使用行跨度或列跨度。在我們的例子中,我們要求reviewEdit控件跨度5行。
程序執(zhí)行后

感謝各位的閱讀!關于“PyQt5中布局管理的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文標題:PyQt5中布局管理的示例分析-創(chuàng)新互聯(lián)
本文URL:http://www.chinadenli.net/article46/docehg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、移動網(wǎng)站建設、云服務器、全網(wǎng)營銷推廣、網(wǎng)站改版、虛擬主機
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容