У меня есть простая QScrollArea с QLabel в качестве внутреннего виджета. Теперь я хочу иметь возможность перемещать внутренний виджет, и если внутренний виджет покидает видимую область, полосы прокрутки должны появляться и правильно перемещаться (и наоборот). Мне удалось создать подвижный внутренний виджет, но мне нужна помощь с полосами прокрутки. Это мой код:
from PySide2 import QtGui, QtCore, QtWidgets
class MyWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent=parent)
self.setFixedSize(QtCore.QSize(600, 400))
layout = QtWidgets.QHBoxLayout(self)
self.scrollArea = QtWidgets.QScrollArea()
self.innerWidget = QtWidgets.QLabel("Inner Widget")
self.innerWidget.setFixedSize(QtCore.QSize(300,200))
self.innerWidget.setStyleSheet("background-color: rgb(160, 160, 200)")
self.scrollArea.setWidget(self.innerWidget)
layout.addWidget(self.scrollArea)
self.mouseOldPos = None
def mousePressEvent(self, event):
rect = self.innerWidget.rect()
localPos = event.pos() - self.innerWidget.pos()
if (localPos.x() > 0) and (localPos.y() > 0):
if rect.contains(localPos.x(),localPos.y()):
self.mouseOldPos = event.pos()
def mouseMoveEvent(self, event):
if self.mouseOldPos is not None:
delta = self.mouseOldPos - event.pos()
iwp = self.innerWidget.pos()
self.innerWidget.move(iwp - delta)
self.mouseOldPos = event.pos()
self.scrollArea.ensureWidgetVisible(self.innerWidget)
def mouseReleaseEvent(self, event):
self.mouseOldPos = None