如何在PyQt中实现鼠标拖拽调整Widget大小?
PyQt6实现控件拖拽调整大小

我们常能在各类软件里拖拽调整Widget的大小,上图就是这类功能的示例。我写了一段包含两个按钮的简单代码,想让这两个按钮支持鼠标拖拽调整大小,但网上搜了一圈没找到可行方案:
import sys from PyQt6.QtWidgets import QWidget, QApplication, QHBoxLayout, QPushButton app = QApplication(sys.argv) class Window(QWidget): def __init__(self) -> None: super().__init__() #LayoutSet layout = QHBoxLayout() self.setLayout(layout) #Add buttons layout.addWidget(QPushButton("ok")) layout.addWidget(QPushButton("cancel")) w = Window() w.show() sys.exit(app.exec())
解决方法
用PyQt6的QSplitter就能实现这个需求,它是专门用来创建可拖拽调整的控件布局的组件。修改后的代码如下:
import sys from PyQt6.QtWidgets import QWidget, QApplication, QHBoxLayout, QPushButton, QSplitter app = QApplication(sys.argv) class Window(QWidget): def __init__(self) -> None: super().__init__() # 创建水平方向的QSplitter splitter = QSplitter() # 向splitter添加按钮 splitter.addWidget(QPushButton("ok")) splitter.addWidget(QPushButton("cancel")) # 将splitter放入主窗口布局 layout = QHBoxLayout() layout.addWidget(splitter) self.setLayout(layout) # 设置两个按钮的初始拉伸比例为1:1,窗口缩放时按比例调整 splitter.setStretchFactor(0, 1) splitter.setStretchFactor(1, 1) w = Window() w.show() sys.exit(app.exec())
功能说明
QSplitter会在两个按钮之间生成可拖拽的分隔条,拖动分隔条就能实时调整两个按钮的宽度。setStretchFactor方法用于设置控件的拉伸权重,确保窗口大小改变时,两个按钮按设定比例分配空间。
内容的提问来源于stack exchange,提问作者Amin Khormaei
相关产品推荐
相关产品推荐

