【发布时间】:2020-04-23 07:00:25
【问题描述】:
我试图了解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()
代码结果如下图:
但是,在我滚动内部小部件后,它会移出视口并在我不希望它被绘制的区域中自行绘制:
我做错了什么?如何让setViewportMargins 功能正常工作?
【问题讨论】:
标签: python pyqt pyqt5 qscrollarea