【问题标题】:PyQt: syncing scroll in 2 different qlistwidgets?PyQt:在 2 个不同的 qlistwidgets 中同步滚动?
【发布时间】:2019-08-13 16:03:43
【问题描述】:

我有 2 个不同的 QListwidgets,它们的滚动与下面的代码正确同步。问题是辅助 Qlistwidget(跟随另一个滚动的那个)不会更新它的项目,除非我用鼠标悬停在它上面。

我对 pyqt 的经验很少,所以我唯一尝试的是使用 repaint 和 update 方法(我在代码中添加了这两个方法,在函数的末尾)。不幸的是,什么都没有发生。

    def move_scrollbar(vs, value):
        vs.blockSignals(True)
        vs.setValue(value)
        vs.blockSignals(False)
        self.list1.repaint()
        self.list2.repaint()
        self.list1.update()
        self.list2.update()

    vs1 = self.list1.verticalScrollBar()
    vs2 = self.list2.verticalScrollBar()

    vs1.valueChanged.connect(partial(move_scrollbar, vs2))
    vs2.valueChanged.connect(partial(move_scrollbar, vs1))

我希望辅助或链接 QListwidget 的视图以与主(我实际滚动的那个)相同的方式更新。

【问题讨论】:

  • 如果两个列表的项目数量相同,则所有项目的大小都相同并且您没有使用 ScrollPerPixel 滚动模式(除非它们的高度始终 b> 相同),将滚动条的valueChanged 信号连接到另一个setValue 插槽就足够了,反之亦然(setValue 不会更新当前值);此外,应该不需要调用更新(并且不需要调用 repaint update),除非你对这些列表小部件做了一些奇怪的事情,或者他们的代表(自定义绘画,也许?)。

标签: python scroll pyqt5 qlistwidget


【解决方案1】:

这对我有用:

    self.vs1 = self.list1.verticalScrollBar()
    self.vs2 = self.list2.verticalScrollBar()

    self.vs1.valueChanged.connect(self.move_scrollbar)
    self.vs2.valueChanged.connect(self.move_scrollbar)

def move_scrollbar(self, value):
    self.vs1.setValue(value)
    self.vs2.setValue(value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多