赞
踩
Qt Designer提供了4种窗口布局方式,分别是:Vertical Layout(垂直布局)、Horizontal Layout(水平布局)、Grid Layout(栅格布局)和Form Layout(表单布局)。
一般进行布局有两种方式:一是通过布局管理器进行布局;二是通过容器控件进行布局。
点击水平布局
将ui文件转换成py文件
可以看到,子控件 QpushButton(按钮)和 QlineEdit(文本框)在构建的时候指定的父控件对象就是 QWidget,布局对象QHBoxLayout指定的父控件对象也是QWidget。这与在 Qt Designer的对象查看器中看到的对象依赖关系是一样的。
新建一个MainWindow
所谓容器控件,就是指能够容纳子控件的控件。使用容器控件,目的是将容器控件中的控件归为一类,以有别于其他控件。当然,容器控件也可以对其子控件进行布局,只不过没有布局管理器常用。
使用容器进行控件布局本质上还是调用的布局管理器。
设置每个窗口控件的绝对坐标和大小,对其进行布局管理。
最简单的布局方法就是设置geometry这个属性 → 设置控件在窗口中的绝对坐标和空间自身的大小。
这个参数代表:
设置垂直布局后,标签的geometry属性变成了灰色不可用,这说明这些标签的位置与大小已经由垂直布局管理器接管,与geometry无关了。
栅格布局的意思是该布局管理器的窗口呈网格状排列。
Vertical Spacer表示两个布局管理器不要彼此挨着,否则视觉效果会不好看。
Horizontal Spacer表示“开始”按钮应该与栅格布局管理器尽可能离得远一些,否则视觉效果也会不好看。
Horizontal Line(Vertical Line)表示“开始”按钮与左边的两个布局管理器根本不是同一个类别,用一条线把它们区分开来。
设置控件在布局管理器中的最小尺寸和最大尺寸。
每个窗口控件都有属于自己的两个尺寸:
sizePolicy的作用是,如果窗口控件在布局管理器中的布局不能满足我们的需求,那么就可以设置该窗口控件的sizePolicy来实现布局的微调。sizePolicy也是每个窗口控件所特有的属性,不同的窗口控件的sizePolicy可能不同。
关于水平策略和垂直策略:
【Minimum指的是该窗口控件的尺寸不能低于sizeHint所提示的尺寸; Maximum指的是该窗口控件的尺寸不能高于sizeHint所提示的尺寸。】
关于水平伸展和垂直伸展
把三个Table的垂直伸展分别设置为1,3,1,可以看到三个标签会按照比例进行放缩。
Qt Designer布局的顺序
使用Qt Designer开发一个完整的GUI程序流程如下:
使用布局管理器对窗体进行布局
单击窗体 → 右键 → 布局 → 选择布局
还可以打破布局来撤销操作。
预览时,快捷键 alt + s 能快速定位到
注意:设置伙伴关系只对英文名字的Display Widgets有效
另一种方法
新建layout_demo_LayoutManage.py
from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QMainWindow,QApplication from UI_layout_demo_LayoutManage import Ui_LayoutDemo class LayoutDemo(QMainWindow,Ui_LayoutDemo): def __init__(self,parent = None): super(LayoutDemo,self).__init__(parent) self.setupUi(self) @pyqtSlot() def on_pushButton_clicked(self): print("收益_min:",self.doubleSpinBox_returns_min.text()) print("收益_max:",self.doubleSpinBox_returns_max.text()) print("最小回撤_min:",self.doubleSpinBox_maxdrawdown_min.text()) print("最大回撤_max:",self.doubleSpinBox_maxdrawdown_max.text()) print("sharp比_min:",self.doubleSpinBox_sharp_min.text()) print("sharp比_max:", self.doubleSpinBox_sharp_max.text()) if __name__ == '__main__': import sys app = QApplication(sys.argv) ui = LayoutDemo() ui.show() sys.exit(app.exec_())
这里有个小问题,这个界面和设计预览时得到的界面不一样,
解决办法
加上一行代码
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
解决
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。