📜  PyQt-布局管理

📅  最后修改于: 2020-11-08 08:09:37             🧑  作者: Mango


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

setGeometry()语法

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

在以下代码段中,监视器上位置(10、10)上显示了300 x 200像素尺寸的顶级窗口。

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()

在窗口中添加了一个PushWidget小部件,并将其放置在窗口右50像素和窗口左上20像素以下的位置。

但是,由于以下原因,此绝对定位不适合-

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

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

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

原始和调整大小的窗口

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

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

  • 确保具有不同分辨率的显示设备上的外观均匀。

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

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

Sr.No. Classes & Description
1 QBoxLayout

QBoxLayout class lines up the widgets vertically or horizontally. Its derived classes are QVBoxLayout (for arranging widgets vertically) and QHBoxLayout (for arranging widgets horizontally).

2 QGridLayout

A GridLayout class object presents with a grid of cells arranged in rows and columns. The class contains addWidget() method. Any widget can be added by specifying the number of rows and columns of the cell.

3 QFormLayout

QFormLayout is a convenient way to create two column form, where each row consists of an input field associated with a label. As a convention, the left column contains the label and the right column contains an input field.