Я пытаюсь понять, как QScrollArea работает над реализацией моего собственного MyQScrollArea
виджета. MyQScrollArea
должен использовать setViewportMargins . Для этого я написал минимальный рабочий пример, показанный ниже:
from PyQt5 import QtWidgets
import sys
class MyScrollArea(QtWidgets.QAbstractScrollArea):
def __init__(self):
super().__init__()
self.label = QtWidgets.QLabel(", ".join(map(str, range(100))), self)
hScrollBar = self.horizontalScrollBar()
hScrollBar.setRange(0, self.label.sizeHint().width() - self.sizeHint().width())
hScrollBar.valueChanged.connect(self._HScrollBarValueChanged)
self.setViewportMargins(100, 0, 0, 0)
self._HScrollBarValueChanged(0)
def _HScrollBarValueChanged(self, value):
self.label.move(-value + self.viewportMargins().left(), 0)
def main():
app = QtWidgets.QApplication(sys.argv)
scroll = MyScrollArea()
scroll.show()
app.exec_()
if __name__ == "__main__":
main()
Результат кода показан ниже:
![Widget before scrolling](https://i.stack.imgur.com/BNwQ4.png)
Однако после прокрутки внутренний виджет выходит из области просмотра и рисует себя в области, которую я не хочу, чтобы он рисовал:
![Widget after scrolling](https://i.stack.imgur.com/SuLOj.png)
Что я делаю что-то не так и как мне заставить работать setViewportMargins функциональность?