青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 41, 文章 - 8, 評論 - 8, 引用 - 0
數據加載中……

[Python][PyQt4]PyQt4的 layout 管理

PyQt4的 layout 管理

在編程中一個重要的事情就是 layout 的管理。layout 管理就是在窗口中布置 widget。管理有兩種方式。我們可以使用 絕對定位 或者 layout 類

絕對定位

程序員可以指定每個 widget 的位置和大小。當你使用絕對定位時,你需要理解一些事情。

  • 如果你改變了窗口的大小,widget 的大小和位置是不會改變的。
  • 在不同平臺上應用可能看起來不太一樣。
  • 在你的應用中改變字體會毀掉你的 layout。
  • 如果你決定改變你的 layout,那么你必須要重新設計你的 layout,這意味著麻煩及耗時。
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
This example shows three labels on a window
using absolute positioning.
author: Jan Bodnar
website: zetcode.com
last edited: October 2011
"""
import sys
from PyQt4 import QtGui
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):
        lbl1 = QtGui.QLabel('Zetcode', self)
        lbl1.move(15, 10)
        lbl2 = QtGui.QLabel('tutorials', self)
        lbl2.move(35, 40)
        lbl3 = QtGui.QLabel('for programmers', self)
        lbl3.move(55, 70)
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Absolute')
        self.show()
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

我們簡單地調用 move() 方法來定位我們的 widget 。在我們這個情況下,這些 widget 是標簽。我們通過給定 x 和 y 坐標進行定位。坐標系統是從左上角開始。x 的值從左到右增加。y 則是從上到下。

Box Layout

通過 layout 類管理會更加靈活和實用。這是優先考慮的方法。基本的 layout 類是 QtGui.QHBoxLayoutQtGui.QVBoxLayout 。它們分別以水平和垂直方式對 widget 進行布局。

假設我們想把兩個按鈕放置在右下角。為了創建這樣的 layout,我們可以使用一個水平的和垂直的盒子。為了創建必要的空間,我們將會增加一個 縮放比例

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 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: October 2011
"""
import sys
from PyQt4 import QtGui
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):
        okButton = QtGui.QPushButton("OK")
        cancelButton = QtGui.QPushButton("Cancel")
        hbox = QtGui.QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(okButton)
        hbox.addWidget(cancelButton)
        vbox = QtGui.QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        self.setLayout(vbox)
        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('Buttons')
        self.show()
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

這里在窗口的右下角放置了兩個按鈕。他們在窗口調整時,會保持處于那個位置。我們使用了 QtGui.HBoxLayoutQtGui.QVBoxLayout

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

此處,我們創建了兩個按鈕。

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

我們創建了一個水平的 layout 。增加了縮放比例和按鈕。這個縮放在兩個按鈕前增加了合適的縮放空白。這就使得按鈕在窗口的右邊。

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

為了創建必要的 layout,我們把水平的 layout 放置到垂直的 layout 中。而垂直盒子中的縮放因子使得水平的盒子處于窗口的底部。

最后,我們設置了窗口的 layout 。

QtGui.QGridLayout

最通用的 layout 類是網格 layout 。這個 layout 把空間分為行和列。為了創建一個網格的 layout,我們可以使用 QtGui.QGridLayout 類。

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we create a skeleton
of a calculator using a QtGui.QGridLayout.
author: Jan Bodnar
website: zetcode.com
last edited: October 2011
"""
import sys
from PyQt4 import QtGui
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):
        names = ['Cls', 'Bck', '', 'Close', '7', '8', '9', '/',
                '4', '5', '6', '*', '1', '2', '3', '-',
                '0', '.', '=', '+']
        grid = QtGui.QGridLayout()
        j = 0
        pos = [(0, 0), (0, 1), (0, 2), (0, 3),
                (1, 0), (1, 1), (1, 2), (1, 3),
                (2, 0), (2, 1), (2, 2), (2, 3),
                (3, 0), (3, 1), (3, 2), (3, 3 ),
                (4, 0), (4, 1), (4, 2), (4, 3)]
        for i in names:
            button = QtGui.QPushButton(i)
            if j == 2:
                grid.addWidget(QtGui.QLabel(''), 0, 2)
            else: grid.addWidget(button, pos[j][0], pos[j][1])
            j = j + 1
        self.setLayout(grid)
        self.move(300, 150)
        self.setWindowTitle('Calculator')
        self.show()
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

在我們的例子中,我們創建了一組按鈕,并以網格放置。為了填補一個空格,我們增加了一個 QtGui.QLable 的 widget 。

grid = QtGui.QGridLayout()

這里,我們創建了一個網格 layout 。

if j == 2:
    grid.addWidget(QtGui.QLable(''), 0, 2)
else: grid.addWidget(button, pos[j][0], pos[j][1])

為了把一個 widget 增加到網格中,我們調用了 addWidget() 方法。參數是 widget,行和列的數字。

再看例子

在網格中,widget 可以跨多行或多列。下面的例子我們就將介紹這個。

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we create a bit
more complicated window layout using
the QtGui.QGridLayout manager.
author: Jan Bodnar
website: zetcode.com
last edited: October 2011
"""
import sys
from PyQt4 import QtGui
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):
        title = QtGui.QLabel('Title')
        author = QtGui.QLabel('Author')
        review = QtGui.QLabel('Review')
        titleEdit = QtGui.QLineEdit()
        authorEdit = QtGui.QLineEdit()
        reviewEdit = QtGui.QTextEdit()
        grid = QtGui.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()
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

我們創建了一個窗口,其中有三個標簽,兩個行編輯區及一個文本編輯區。layout 由 QtGui.QGridLayout 創建。

grid = QtGui.QGridLayout()
grid.setSpacing(10)

我們創建了網格 layout,并設置了 widget 間的間隔。

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

如果我們增加一個 widget 到網格中,我們可以提供行和列的跨度。我們使得 reviewEdit 的跨度為 5 。


這個部分我們講述了 layout 管理。

posted on 2012-02-05 10:04 mirguest 閱讀(4670) 評論(0)  編輯 收藏 引用 所屬分類: Python

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产久精国产一老狼| 亚洲国产精品久久久久秋霞影院| 精品999日本| 性欧美超级视频| 久久aⅴ国产欧美74aaa| 尤物99国产成人精品视频| 裸体丰满少妇做受久久99精品| 亚洲第一在线视频| 欧美激情精品久久久久久黑人| 国产精品美女久久久浪潮软件 | 亚洲午夜在线观看视频在线| 欧美精品激情| 欧美一级久久| 老司机一区二区三区| 99精品国产在热久久| 亚洲图片在区色| 在线播放精品| 一本色道久久综合| 狠狠色丁香婷婷综合影院| 亚洲精品国久久99热| 国产精品视频专区| 欧美激情一二三区| 国产欧美视频一区二区三区| 亚洲高清色综合| 国产欧美一区二区色老头| 欧美国产第一页| 国产日韩欧美在线一区| 91久久精品久久国产性色也91| 午夜在线电影亚洲一区| 亚洲日本中文字幕区| 亚洲欧美久久| 在线一区视频| 美女脱光内衣内裤视频久久影院 | 狠狠色丁香久久婷婷综合丁香 | 麻豆成人91精品二区三区| 欧美另类久久久品| 久久综合中文| 国产亚洲一区在线| 在线视频精品一| 99国产精品国产精品久久| 欧美一区二区三区男人的天堂| 国产精品中文在线| 亚洲三级电影全部在线观看高清| 欧美 日韩 国产精品免费观看| 国产综合视频| 一区二区三区日韩| 亚洲精选大片| 欧美成人午夜77777| 美女主播视频一区| 狠狠综合久久av一区二区老牛| 久久综合999| 国产美女诱惑一区二区| 亚洲一区二三| 性18欧美另类| 国产色视频一区| 亚洲综合视频网| 亚洲欧美久久久| 国产精品啊v在线| 亚洲视频1区| 小黄鸭精品aⅴ导航网站入口| 性欧美18~19sex高清播放| 亚洲欧美国产高清| 国产精品美女久久久久久免费| 久久激情综合网| 国产精品视频专区| 新67194成人永久网站| 欧美一区二区三区四区高清| 国产日韩欧美一二三区| 性8sex亚洲区入口| 另类专区欧美制服同性| 亚洲第一区中文99精品| 欧美 日韩 国产精品免费观看| 亚洲欧美在线免费| 国产女同一区二区| 久久精品在线播放| 欧美成人免费在线| 一区二区三区免费观看| 国产精品久久久久久久久久直播| 久久精品中文字幕免费mv| 国产一区自拍视频| 美女久久网站| 亚洲三级性片| 欧美一区二区三区久久精品茉莉花 | 亚洲免费观看| 香蕉久久夜色精品| 国产视频一区二区三区在线观看| 亚洲激情校园春色| 亚洲欧美日韩国产综合精品二区| 久久―日本道色综合久久| 欧美激情一区二区三区蜜桃视频| 国产精品一区二区三区四区五区| 欧美成年人视频| 亚洲老司机av| 国产精品无码专区在线观看| 久久精品成人一区二区三区蜜臀| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲国产婷婷综合在线精品| 亚洲图片欧美午夜| 狠狠狠色丁香婷婷综合激情| 欧美日韩黄视频| 久久aⅴ国产紧身牛仔裤| 亚洲激情综合| 久久五月天婷婷| 亚洲欧美美女| 亚洲精品国产精品国自产观看| 久久丁香综合五月国产三级网站| 日韩一区二区精品| 国产欧美日本| 欧美视频日韩视频在线观看| 久久精品官网| 亚洲欧美成人一区二区三区| 亚洲欧洲精品一区| 久久久久久亚洲精品中文字幕| 国产精品区一区二区三区| 久久裸体视频| 性欧美大战久久久久久久久| 亚洲国产经典视频| 快she精品国产999| 久久超碰97中文字幕| 99精品欧美| 亚洲品质自拍| 亚洲韩国青草视频| 国内精品久久久久久久影视蜜臀| 欧美永久精品| 亚洲一区欧美二区| 在线一区观看| 一本色道**综合亚洲精品蜜桃冫 | 农村妇女精品| 久久久免费精品视频| 欧美中文字幕在线播放| 亚洲天堂免费在线观看视频| 日韩视频免费观看高清完整版| 欧美日韩午夜激情| 欧美凹凸一区二区三区视频| 久久久中精品2020中文| 久久精品一区中文字幕| 亚洲女爱视频在线| 午夜精品一区二区三区在线视| 久久九九精品| 午夜激情综合网| 午夜精品一区二区三区在线| 午夜在线电影亚洲一区| 午夜精品理论片| 欧美在线看片| 久久久久在线| 欧美成年网站| 亚洲国产综合视频在线观看| 亚洲国产日韩欧美在线图片 | 一区二区免费在线观看| 99精品热6080yy久久| 中国成人在线视频| 西西裸体人体做爰大胆久久久| 狠狠爱成人网| 亚洲国产毛片完整版| 亚洲韩国日本中文字幕| 夜夜爽夜夜爽精品视频| 亚洲女爱视频在线| 久久成人综合视频| 欧美黄网免费在线观看| 最新中文字幕一区二区三区| 亚洲午夜激情| 久久久精品国产一区二区三区| 亚洲三级网站| 亚洲欧美日韩一区二区在线 | 国产精品啊v在线| 国产九九精品| 黄色资源网久久资源365| 亚洲精品视频免费在线观看| 亚洲影院免费| 美女尤物久久精品| 亚洲精选在线| 午夜日韩在线| 欧美激情2020午夜免费观看| 国产精品看片资源| 亚洲国产视频一区| 亚洲一区二区视频| 免播放器亚洲| 亚洲一区三区电影在线观看| 久久免费视频一区| 国产精品国产三级国产普通话蜜臀| 久久精品官网| 欧美午夜激情视频| 亚洲第一在线综合网站| 亚洲视频一区在线| 久久综合五月| 亚洲专区一区| 欧美日韩国产欧美日美国产精品| 久久久青草婷婷精品综合日韩| 亚洲一区久久久| 欧美精品一区在线播放| 国内精品久久国产| 欧美亚洲一区二区三区| 亚洲黄色在线看| 久久久噜噜噜久久中文字免| 国产乱人伦精品一区二区| 99视频精品在线| 欧美国产高清| 久久频这里精品99香蕉| 国产午夜精品全部视频播放| 亚洲自拍啪啪|