PyQt - 布局管理



可以通过指定以像素为单位测量的绝对坐标,将GUI小部件放置在容器窗口内。坐标相对于`setGeometry()`方法定义的窗口尺寸。

setGeometry() 语法

QWidget.setGeometry(xpos, ypos, width, height)

在下面的代码片段中,显示了一个大小为300x200像素的顶级窗口,显示在显示器上的(10, 10)位置。

import sys
from PyQt4 import QtGui

def window():
   app = QtGui.QApplication(sys.argv)
   w = QtGui.QWidget()
	
   b = QtGui.QPushButton(w)
   b.setText("Hello World!")
   b.move(50,20)
	
   w.setGeometry(10,10,300,200)
   w.setWindowTitle(“PyQt”)
   w.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   window()

一个PushButton小部件被添加到窗口中,并放置在窗口左上角位置向右50像素,向下20像素的位置。

然而,这种绝对定位由于以下原因并不合适:

  • 即使调整窗口大小,小部件的位置也不会改变。

  • 在具有不同分辨率的不同显示设备上,外观可能不统一。

  • 布局修改很困难,因为它可能需要重新设计整个表单。

Original and Resized Window

PyQt API 提供了布局类,用于更优雅地管理容器内小部件的位置。与绝对定位相比,布局管理器的优点是:

  • 窗口内的小部件会自动调整大小。

  • 确保在具有不同分辨率的显示设备上外观统一。

  • 可以动态添加或删除小部件,而无需重新设计。

以下是我们将在本章中逐一讨论的类列表。

序号 类和描述
1 QBoxLayout

QBoxLayout 类垂直或水平排列小部件。其派生类是 QVBoxLayout(用于垂直排列小部件)和 QHBoxLayout(用于水平排列小部件)。

2 QGridLayout

GridLayout 类对象以行和列排列的单元格网格形式呈现。该类包含 addWidget() 方法。可以通过指定单元格的行数和列数来添加任何小部件。

3 QFormLayout

QFormLayout 是一种创建两列表单的便捷方式,其中每一行都包含一个与标签关联的输入字段。按照惯例,左列包含标签,右列包含输入字段。

广告