当将几个组件放置在窗口中时,要考虑他们的相对位置和最小尺寸的问题。默认的窗口大小是可以改变的,因此,有必要拦截resizing 事件,调整每个部件的位置和大小。 PyQt库提供许多具有这些功能的组件 - 容器。我们所需要的是选择正确的容器,以特定顺序添加组件,然后将容器放在窗口或另一个容器中。
1.绝对定位
在讨论容器之前,让我们考虑组件在窗口中的绝对定位。如果在创建组件时指定了其他父组件,那么他的默认显示位置为坐标(0,0)。也就是说,如果添加了多个组件,它们将全部显示在相同的位置,彼此重叠。最后一个添加的组件将位于此堆的顶部,其余组件将仅部分可见或根本不可见。添加的组件的大小取决于他的内容。
要移动组件,可以使用move()方法;调整其大小用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_())
绝对定位的缺点:
窗口变化时,要在代码中对每个组件的位置及大小进行调整;
使用固定大小,标签组件上的文本可能不能完整显示。不同操作系统的默认字体并不相同,所以固定大小难以实现跨平台。此外,由于同一内容的不同语言文本长度存在差异,使用固定大小也难以实现程序界面的跨语言。