gpt4 book ai didi

python - 自定义 QSizeGrip 以调整 QListWidget 的大小

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:50 24 4
gpt4 key购买 nike

我想制作一个底部带有调整大小 handle 的 QListWidget(类似于您在此类网页上看到的文本字段)。我看到一些人在那里问同样的问题,但没有找到完整的例子。

我有一些代码几乎就在那里,但它在调整大小时闪烁,所以我猜我缺少关于调整大小策略或布局或其他东西的东西......

这是我的“工作”示例。理论非常简单,您只需测量鼠标在小部件的 mousePressEvent 中移动的距离,并相应地调整大小/重新定位。不幸的是,我缺少一些基本的东西,我不知道是什么:

from PyQt4 import QtGui
import sys

class Grip(QtGui.QLabel):
def __init__(self, parent, move_widget):
super(Grip, self).__init__(parent)
self.move_widget = move_widget
self.setText("+")
self.min_height = 50

self.mouse_start = None
self.height_start = self.move_widget.height()
self.resizing = False
self.setMouseTracking(True)


def showEvent(self, event):
super(Grip, self).showEvent(event)
self.reposition()

def mousePressEvent(self, event):
super(Grip, self).mousePressEvent(event)
self.resizing = True
self.height_start = self.move_widget.height()
self.mouse_start = event.pos()

def mouseMoveEvent(self, event):
super(Grip, self).mouseMoveEvent(event)
if self.resizing:
delta = event.pos() - self.mouse_start
height = self.height_start + delta.y()
if height > self.min_height:
self.move_widget.setFixedHeight(height)
else:
self.move_widget.setFixedHeight(self.min_height)

self.reposition()

def mouseReleaseEvent(self, event):
super(Grip, self).mouseReleaseEvent(event)
self.resizing = False

def reposition(self):
rect = self.move_widget.geometry()
self.move(rect.right(), rect.bottom())


class Dialog(QtGui.QDialog):
def __init__(self):
super(Dialog, self).__init__()
layout = QtGui.QVBoxLayout()
self.setLayout(layout)
list_widget = QtGui.QListWidget()
layout.addWidget(list_widget)
gripper = Grip(self, list_widget)

layout.addWidget(QtGui.QLabel("Test"))

self.setGeometry(200, 500, 200, 500)

最佳答案

试一试:

def mouseMoveEvent(self, event):
super(Grip, self).mouseMoveEvent(event)
if self.resizing:
delta = event.pos() - self.mouse_start
height = self.height_start + delta.y()
if height > self.min_height:
self.move_widget.setFixedHeight(height)
else:
self.move_widget.setFixedHeight(self.min_height)

#self.reposition() # <- ---

def mouseReleaseEvent(self, event):
super(Grip, self).mouseReleaseEvent(event)
self.resizing = False

self.reposition() # <- +++

关于python - 自定义 QSizeGrip 以调整 QListWidget 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52486823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com