Я хочу сделать 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)