亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

pyqt——布局管理

wfc_666 / 529人閱讀

摘要:布局管理在一個(gè)程序里,布局是一個(gè)很重要的方面。布局就是如何管理應(yīng)用中的元素和窗口。和是基本的布局類,分別是水平布局和垂直布局。上面的例子完成了在應(yīng)用的右下角放了兩個(gè)按鈕的需求。這種布局是把窗口分為行和列。

布局管理

在一個(gè)GUI程序里,布局是一個(gè)很重要的方面。布局就是如何管理應(yīng)用中的元素和窗口。有兩種方式可以搞定:絕對(duì)定位和PyQt5的layout類

絕對(duì)定位

每個(gè)程序都是以像素為單位區(qū)分元素的位置,衡量元素的大小。所以我們完全可以使用絕對(duì)定位搞定每個(gè)元素和窗口的位置。但是這也有局限性:

元素不會(huì)隨著我們更改窗口的位置和大小而變化。

不能適用于不同的平臺(tái)和不同分辨率的顯示器

更改應(yīng)用字體大小會(huì)破壞布局

如果我們決定重構(gòu)這個(gè)應(yīng)用,需要全部計(jì)算一下每個(gè)元素的位置和大小

下面這個(gè)就是絕對(duì)定位的應(yīng)用

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
ZetCode PyQt5 tutorial 
This example shows three labels on a window
using absolute positioning. 

Author: Jan Bodnar
Website: zetcode.com 
Last edited: August 2017
"""

import sys
from PyQt5.QtWidgets import QWidget, QLabel, QApplication

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        lbl1 = QLabel("Zetcode", self)
        lbl1.move(15, 10)

        lbl2 = QLabel("tutorials", self)
        lbl2.move(35, 40)

        lbl3 = QLabel("for programmers", self)
        lbl3.move(55, 70)        

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle("Absolute")    
        self.show()


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

我們使用move()方法定位了每一個(gè)元素,使用x、y坐標(biāo)。x、y坐標(biāo)的原點(diǎn)是程序的左上角。

lbl1 = QLabel("Zetcode", self)
lbl1.move(15, 10)

這個(gè)元素的左上角就在這個(gè)程序的左上角開(kāi)始的(15, 10)的位置。

程序展示:

盒布局

使用盒布局能讓程序具有更強(qiáng)的適應(yīng)性。這個(gè)才是布局一個(gè)應(yīng)用的更合適的方式。QHBoxLayoutQVBoxLayout是基本的布局類,分別是水平布局和垂直布局。

如果我們需要把兩個(gè)按鈕放在程序的右下角,創(chuàng)建這樣的布局,我們只需要一個(gè)水平布局加一個(gè)垂直布局的盒子就可以了。再用彈性布局增加一點(diǎn)間隙。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
ZetCode PyQt5 tutorial 

In this example, we position two push
buttons in the bottom-right corner 
of the window. 

Author: Jan Bodnar
Website: zetcode.com 
Last edited: August 2017
"""

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, 
    QHBoxLayout, QVBoxLayout, QApplication)


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        okButton = QPushButton("OK")
        cancelButton = QPushButton("Cancel")

        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, 300, 150)
        self.setWindowTitle("Buttons")    
        self.show()


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

上面的例子完成了在應(yīng)用的右下角放了兩個(gè)按鈕的需求。當(dāng)改變窗口大小的時(shí)候,它們能依然保持在相對(duì)的位置。我們同時(shí)使用了QHBoxLayoutQVBoxLayout

okButton = QPushButton("OK")
cancelButton = QPushButton("Cancel")

這是創(chuàng)建了兩個(gè)按鈕。

hbox = QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)

創(chuàng)建一個(gè)水平布局,增加兩個(gè)按鈕和彈性空間。stretch函數(shù)在兩個(gè)按鈕前面增加了一些彈性空間。下一步我們把這些元素放在應(yīng)用的右下角。

vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addLayout(hbox)

為了布局需要,我們把這個(gè)水平布局放到了一個(gè)垂直布局盒里面。彈性元素會(huì)把所有的元素一起都放置在應(yīng)用的右下角。

self.setLayout(vbox)

最后,我們就得到了我們想要的布局。

程序預(yù)覽:

柵格布局

最常用的還是柵格布局了。這種布局是把窗口分為行和列。創(chuàng)建和使用柵格布局,需要使用QGridLayout模塊。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
ZetCode PyQt5 tutorial 

In this example, we create a skeleton
of a calculator using a QGridLayout.

author: Jan Bodnar
website: zetcode.com 
last edited: January 2015
"""

import sys
from PyQt5.QtWidgets import (QWidget, QGridLayout, 
    QPushButton, QApplication)


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("Calculator")
        self.show()


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

這個(gè)例子里,我們創(chuàng)建了柵格化的按鈕。

grid = QGridLayout()
self.setLayout(grid)

創(chuàng)建一個(gè)QGridLayout實(shí)例,并把它放到程序窗口里。

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)]

創(chuàng)建按鈕位置列表。

for position, name in zip(positions, names):

    if name == "":
        continue
    button = QPushButton(name)
    grid.addWidget(button, *position)

創(chuàng)建按鈕,并使用addWidget()方法把按鈕放到布局里面。

程序預(yù)覽:

制作提交反饋信息的布局

組件能跨列和跨行展示,這個(gè)例子里,我們就試試這個(gè)功能。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
ZetCode PyQt5 tutorial 

In this example, we create a more 
complicated window layout using
the QGridLayout manager. 

Author: Jan Bodnar
Website: zetcode.com 
Last edited: August 2017
"""

import sys
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, 
    QTextEdit, QGridLayout, QApplication)

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        title = QLabel("Title")
        author = QLabel("Author")
        review = QLabel("Review")

        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("Review")    
        self.show()


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

我們創(chuàng)建了一個(gè)有三個(gè)標(biāo)簽的窗口。兩個(gè)行編輯和一個(gè)文版編輯,這是用QGridLayout模塊搞定的。

grid = QGridLayout()
grid.setSpacing(10)

創(chuàng)建標(biāo)簽之間的空間。

grid.addWidget(reviewEdit, 3, 1, 5, 1)

我們可以指定組件的跨行和跨列的大小。這里我們指定這個(gè)元素跨5行顯示。

程序預(yù)覽:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42983.html

相關(guān)文章

  • 圖解——PyQt4從入門到運(yùn)用

    摘要:將程序包裝在界面里,可以將輸入通過(guò)多種途徑如文本框彈出路徑選擇等輸入到程序里。將輸出通過(guò)文本框顯示出來(lái)將執(zhí)行信息如如報(bào)錯(cuò)信息運(yùn)行進(jìn)度通過(guò)文本框或進(jìn)度條顯示出來(lái)文章安排先介紹安裝和配合的使用。 作為一個(gè)程序的開(kāi)發(fā)者,我們僅僅需要在相應(yīng)路徑通過(guò)命令行就可執(zhí)行那個(gè)程序。但是,不懂行的人不理解這個(gè)黑框框的東西,陌生領(lǐng)域任何人都沒(méi)有安全感,所以他們是拒絕接受一個(gè)項(xiàng)目?jī)H僅只是通過(guò)一個(gè)黑框框來(lái)執(zhí)行的...

    史占廣 評(píng)論0 收藏0
  • matplotlib嵌入到pyqt

    摘要:坐標(biāo)軸,標(biāo)題,標(biāo)簽,圖形樣式餅圖,柱狀圖,折線圖等等等的設(shè)置都通過(guò)的成員函數(shù)來(lái)設(shè)置完成。寫在最后因?yàn)樽陨砟芰τ邢?,也不是科班出身,都是自學(xué)的,目前還是一名學(xué)生,所以有未盡之處還請(qǐng)指正,不喜勿噴。 在pyqt5中使用matplotlib 前言 雖然,qt中也提供了繪圖函數(shù),但對(duì)于初學(xué)者并不是很容易掌握,眾所周知,matplot提供了簡(jiǎn)單,易用,強(qiáng)大的繪圖函數(shù),結(jié)合mumpy基本可以達(dá)到m...

    z2xy 評(píng)論0 收藏0
  • PyQt5 調(diào)研(一)

    摘要:首先,定義自定義信號(hào)其中來(lái)自于信號(hào)會(huì)攜帶兩個(gè)字符串類型的數(shù)據(jù)。然后,在子窗口發(fā)射這個(gè)信號(hào)最終,在父窗口槽函數(shù)接受這個(gè)信號(hào)就是槽函數(shù),用來(lái)接受信號(hào) 工具準(zhǔn)備 編輯器: vscode OR Pycharm vscode需要安裝PYQT Integration 以及 Python 插件, Pycharm需要配置External Tools pycharm配置External Tools 配置...

    Jonathan Shieber 評(píng)論0 收藏0
  • PyQt5 調(diào)研(一)

    摘要:首先,定義自定義信號(hào)其中來(lái)自于信號(hào)會(huì)攜帶兩個(gè)字符串類型的數(shù)據(jù)。然后,在子窗口發(fā)射這個(gè)信號(hào)最終,在父窗口槽函數(shù)接受這個(gè)信號(hào)就是槽函數(shù),用來(lái)接受信號(hào) 工具準(zhǔn)備 編輯器: vscode OR Pycharm vscode需要安裝PYQT Integration 以及 Python 插件, Pycharm需要配置External Tools pycharm配置External Tools 配置...

    Yi_Zhi_Yu 評(píng)論0 收藏0
  • PyQt5, GridLayout

    摘要:簡(jiǎn)介網(wǎng)格布局小部件提供了一個(gè)容器,它允許小部件在動(dòng)態(tài)大小的網(wǎng)格中布局。創(chuàng)建方法方法向項(xiàng)目中的網(wǎng)格布局添加小部件參數(shù)表示該部件將被添加到的網(wǎng)格布局的和。行和列的值在類似坐標(biāo)系統(tǒng)上工作,,表示左上角。行數(shù)和列數(shù)可以從容器中獲得 showImg(https://segmentfault.com/img/bVbess6?w=4000&h=1936); 簡(jiǎn)介 網(wǎng)格布局小部件提供了一個(gè)容器,它允許...

    hzx 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<