本文共 5552 字,大约阅读时间需要 18 分钟。
最简单的布局方法就是设置geometry
这个属性。Geometry
属性在PyQt中主要用来设置控件在窗口中的绝对坐标与控件自身的大小,如下图:
可以通过修改这些属性值来改变控件的绝对坐标。
绝对布局每次都要通过手工矫正位置,感觉很麻烦,Qt Designer 提供了4种窗口布局方式,分别是:Vertical Layout
(垂直布局)、Horizontal Layout
(水平布局)、Grid Layout
(栅格布局)、Form Layout
(表单布局)。它们位于Qt Designer主窗口的左侧区域的Widget Box(工具箱)里的Layouts(布局)栏中,如图所示: 1、
2、垂直布局
:控件默认按照从上到下的顺序进行纵向添加;水平布局
:控件默认按照从左到右的顺序进行纵向添加; 3、栅格布局
:将窗口控件放入一个网格之中,然后将它们合理地划分成若干行(row)和列(column),并把其中的每个窗口控件放置在合适的单元(cell)中,这里的单元是指由行和列交叉所划分出来的空间。 4、表单布局
:控件以两列的形式布局在表单中,其中左列包含标签,右列包含输入控件。
一般进行布局有两种方式:一是通过布局管理器进行布局;二是通过容器控件进行布局。
以水平布局为例,打开 Qt Designer,新建一个MainWindow,然后在其中放入两个子控件:一个文本框(lineEdit
)和一个按钮(pushButton
)。选中这两个控件,然后点击上方菜单栏中的"Form"
,在弹出的菜单中选择Lay Out Horizontally 或者快捷键Ctrl+1进行水平布局。
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'D:\Python--PyQt5--Eric6\first.ui'## Created by: PyQt5 UI code generator 5.13.2## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.widget = QtWidgets.QWidget(self.centralwidget) self.widget.setGeometry(QtCore.QRect(110, 60, 273, 30)) self.widget.setObjectName("widget") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.pushButton = QtWidgets.QPushButton(self.widget) self.pushButton.setObjectName("pushButton") self.horizontalLayout_2.addWidget(self.pushButton) self.lineEdit = QtWidgets.QLineEdit(self.widget) self.lineEdit.setObjectName("lineEdit") self.horizontalLayout_2.addWidget(self.lineEdit) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "PushButton"))if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
所谓容器控件,就是指能够容纳子控件的控件。使用容器控件,目的是将容器控件中的控件归为一类,以有别于其他控件。
以水平布局为例,新建一个MainWindow,从左侧容器(Containers)导航栏拖入一个Frame
控件,并在其放入Label
、LineEdit
、Button
控件,并对其重新命名,如图:
Frame
控件,快捷键Ctrl+1对其进行水平布局,如下图: 将.ui文件转换为.py文件之后,可以看到以下内容: # -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'D:\Python--PyQt5--Eric6\first.ui'## Created by: PyQt5 UI code generator 5.13.2## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.frame = QtWidgets.QFrame(self.centralwidget) self.frame.setGeometry(QtCore.QRect(119, 139, 356, 52)) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setObjectName("frame") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label = QtWidgets.QLabel(self.frame) self.label.setObjectName("label") self.horizontalLayout_2.addWidget(self.label) self.lineEdit = QtWidgets.QLineEdit(self.frame) self.lineEdit.setObjectName("lineEdit") self.horizontalLayout_2.addWidget(self.lineEdit) self.pushButton = QtWidgets.QPushButton(self.frame) self.pushButton.setObjectName("pushButton") self.horizontalLayout_2.addWidget(self.pushButton) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.label.setText(_translate("MainWindow", " 姓名")) self.pushButton.setText(_translate("MainWindow", "PushButton"))if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
转载地址:http://epozi.baihongyu.com/