在GUI編程中有一個不容忽視的部分,那就是布局管理。布局管理掌控著我們的控件在應(yīng)用程序窗口如何擺放。布局管理可以通過兩種方式來完成。我們可以使用絕對定位或布局類兩種方法控制程序窗口中的控件位置。
絕對定位
每個控件按程序員指定的位置放置。當(dāng)您使用絕對定位,我們要了解以下限制:
如果我們調(diào)整窗口的大小控件的大小和位置保持不變 在不同平臺上應(yīng)用程序看起來可能會不同 更改字體可能會破壞應(yīng)用程序的布局 如果決定改變布局,我們必須每個控件徹底的加以修改,這是繁瑣和耗時的下面的例子就是控件的絕對坐標(biāo)定位方式。
#!/usr/bin/python3# -*- coding: utf-8 -*-"""PyQt5 教程這個例子顯示了在窗口中使用絕對定位的三個標(biāo)簽。作者:我的世界你曾經(jīng)來過博客:http://blog.csdn.net/weiaitaowang最后編輯:2016年7月31日"""import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QLabelclass 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_())在我們的例子中使用的都是標(biāo)簽(Label)。我們通過提供x和y坐標(biāo)值定位它們。坐標(biāo)系的原點是控件的左上角。 x值增長是由左到右。 y值增長是從上到下。
lbl1 = QLabel('我的世界你曾經(jīng)來過', self)lbl1.move(15, 10)標(biāo)簽控件被放置在 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 sysfrom 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_())
新聞熱點
疑難解答
圖片精選