pyqt动态拖拽调整视窗比例
前言
一直想给我的日志工具实现自由调整视窗比例的功能,之前一直以为拖拽调整视窗比例是在分割线上做,后面才知道是使用 QSplitter ,关于 QSplitter 有一些需要注意的地方。
QSplitter实现动态调整比例
打破布局
如果原有是有水平布局或垂直布局的,需要先打破布局:
打破布局后,才能添加 splitter。
选定想要动态移动的模块,添加splitter
打破布局后,选中想要添加 splitter 的几个模块,之后 splitter 的图标就会由灰色变为可以选择:
根据需要选择是垂直还是水平分割。
如果使用 QSplitter 后,wighet无法填充整个窗口
我当时在使用 QSplitter 后,wighet 就无法填充整个窗口了,这个是由于当时是将 QSplitter 当成了一个控件放在了主界面的布局里,因此 QSplitter 会被挤压或者被留了边距,导致无法完全填充。这个问题只需要将 QSplitter 放置在最外层的布局即可:
设置分割线的格式
分割线的格式可以编辑 QSS :
QSplitter::handle { background-color: #666; margin: 0px;}QSplitter::handle:horizontal { width: 6px; /* 水平分割线宽度 */}QSplitter::handle:vertical { height: 6px; /* 垂直分割线高度 */}QSplitter::handle:pressed,QSplitter::handle:hover { background-color: #0078d4; /* 悬停/拖动时高亮 */}
设置初始的分割比例
由于我是分割了三份,所以直接用 QtDesigner 没办法设置三个的比例,只好使用代码来手动分割,只需要在调用 ui 后,再指定 ui 中的 splitter,设置初始比例即可:
# 设置主窗口默认比例ui.splitter.setStretchFactor(0, 3) # 第一个控件比例ui.splitter.setStretchFactor(1, 5) # 第一个控件比例ui.splitter.setStretchFactor(2, 1) # 第一个控件比例