博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PyQt5之布局管理
阅读量:3959 次
发布时间:2019-05-24

本文共 5552 字,大约阅读时间需要 18 分钟。

PyQt5之布局管理

绝对布局

最简单的布局方法就是设置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进行水平布局。

在这里插入图片描述

结果如下图:

在这里插入图片描述

将.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.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控件,并在其放入LabelLineEditButton控件,并对其重新命名,如图:

在这里插入图片描述

然后选中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/

你可能感兴趣的文章
Apache FileUpload文件上传组件API解析
查看>>
屏蔽usb的方法- -
查看>>
JSP编程进度条设计
查看>>
精心收集的面试笔试题库,网络上很难找到这么齐全的,推荐给大家
查看>>
教学视频
查看>>
JS操作Cookie详解
查看>>
Java正则表达式详解
查看>>
myeclipse 快捷键
查看>>
对div排序
查看>>
读写blob类型字段
查看>>
js类型转换
查看>>
spring实例化Bean理解
查看>>
Mac下配置JAVA_HOME
查看>>
fedora 安装mp3播放器插件
查看>>
赏心悦目的宏代码
查看>>
理解套接字recv(),send()
查看>>
发一个C++写的跨平台的BlockingQueue
查看>>
Linux TCP/IP协议栈剖析【体系结构篇】
查看>>
游戏开发中预防内存泄露的一些措施
查看>>
以前的文章全部移除了。
查看>>