Python 如何实现自己的QScrollara
我试图了解a是如何实现我自己的Python 如何实现自己的QScrollara,python,pyqt,pyqt5,qscrollarea,Python,Pyqt,Pyqt5,Qscrollarea,我试图了解a是如何实现我自己的myqscrollara小部件的MyqScrollara应使用。为此,我编写了一个最低限度的工作示例,如下所示: from PyQt5 import QtWidgets import sys class MyScrollArea(QtWidgets.QAbstractScrollArea): def __init__(self): super().__init__() self.label = QtWidgets.QLab
myqscrollara
小部件的<代码>MyqScrollara应使用。为此,我编写了一个最低限度的工作示例,如下所示:
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()
代码的结果如下所示:
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()
但是,在我滚动内部小部件后,它将移出视口,并在一个我不希望它被绘制的区域中绘制自身:
我做错了什么?如何使功能正常工作?除了每次修改小部件的几何图形时修改QScrollBar的属性外,还必须将其设置为视口的子对象: 导入系统 从PyQt5导入QtWidgets 类MyScrollArea(qtwidts.QAbstractScrollArea): 定义初始化(自): super()。\uuuu init\uuuuu() self.label=qtwidts.QLabel(“,”.join(map(str,range(100))),self.viewport() self.setViewportMargins(100,0,0,0) self.horizontalScrollBar().valueChanged.connect( self.on\u hscrollbar\u值\u已更改 ) self.update_滚动条() CROLLBAR上的def值已更改(自身,值): self.label.move(-value,0) def更新_滚动条(自身): self.horizontalScrollBar().setRange( 0,self.label.sizeHint().width()-self.viewport().width() ) self.horizontalScrollBar().setPageStep(self.viewport().width()) def resizeEvent(自我,事件): self.update_滚动条() super().resizeEvent(事件) def main(): app=qtwidts.QApplication(sys.argv) scroll=MyScrollArea() scroll.show() app.exec() 如果名称=“\uuuuu main\uuuuuuuu”: main()
除了在每次修改小部件的几何图形时修改QScrollBar的属性外,还必须将其设置为QLabel作为视口的子对象: 导入系统 从PyQt5导入QtWidgets 类MyScrollArea(qtwidts.QAbstractScrollArea): 定义初始化(自): super()。\uuuu init\uuuuu() self.label=qtwidts.QLabel(“,”.join(map(str,range(100))),self.viewport() self.setViewportMargins(100,0,0,0) self.horizontalScrollBar().valueChanged.connect( self.on\u hscrollbar\u值\u已更改 ) self.update_滚动条() CROLLBAR上的def值已更改(自身,值): self.label.move(-value,0) def更新_滚动条(自身): self.horizontalScrollBar().setRange( 0,self.label.sizeHint().width()-self.viewport().width() ) self.horizontalScrollBar().setPageStep(self.viewport().width()) def resizeEvent(自我,事件): self.update_滚动条() super().resizeEvent(事件) def main(): app=qtwidts.QApplication(sys.argv) scroll=MyScrollArea() scroll.show() app.exec() 如果名称=“\uuuuu main\uuuuuuuu”: main()
您不知道我尝试了多少次,但我没有尝试将视口设置为父视口。谢谢你指出这一点。缺少代码的其余部分是由于最小的工作示例造成的。谢谢你的帮助!您不知道我尝试了多少次,但我没有尝试将视口设置为父视口。谢谢你指出这一点。缺少代码的其余部分是由于最小的工作示例造成的。谢谢你的帮助!