當將幾個組件放置在窗口中時,要考慮他們的相對位置和最小尺寸的問題囊扳。默認的窗口大小是可以改變的挥转,因此,有必要攔截resizing 事件钥组,調(diào)整每個部件的位置和大小输硝。 PyQt庫提供許多具有這些功能的組件 - 容器。我們所需要的是選擇正確的容器程梦,以特定順序添加組件点把,然后將容器放在窗口或另一個容器中橘荠。
1.絕對定位
在討論容器之前,讓我們考慮組件在窗口中的絕對定位郎逃。如果在創(chuàng)建組件時指定了其他父組件哥童,那么他的默認顯示位置為坐標(0,0)褒翰。也就是說贮懈,如果添加了多個組件,它們將全部顯示在相同的位置优训,彼此重疊朵你。最后一個添加的組件將位于此堆的頂部,其余組件將僅部分可見或根本不可見揣非。添加的組件的大小取決于他的內(nèi)容撬呢。
要移動組件,可以使用move()方法;調(diào)整其大小用resize()方法妆兑。同時更改位置和大小魂拦,可使用setGeometry()方法。
下面代碼為在窗口中顯示題字和按鈕搁嗓,并指定每個組件的位置和尺寸芯勘。
-- coding: utf-8 --
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("組件的絕對定位")
window.resize(300, 120)
label = QtWidgets.QLabel("Label組件", window)
button = QtWidgets.QPushButton("按鈕組件", window)
label.setGeometry(10, 10, 280, 60)
button.resize(280, 30)
button.move(10, 80)
window.show()
sys.exit(app.exec_())
絕對定位的缺點:
窗口變化時,要在代碼中對每個組件的位置及大小進行調(diào)整腺逛;
使用固定大小荷愕,標簽組件上的文本可能不能完整顯示。不同操作系統(tǒng)的默認字體并不相同棍矛,所以固定大小難以實現(xiàn)跨平臺安疗。此外,由于同一內(nèi)容的不同語言文本長度存在差異够委,使用固定大小也難以實現(xiàn)程序界面的跨語言荐类。