首页 > 解决方案 > 如何为两个 QListWidgets 使用一个 Qscrollbar

问题描述

我想QListWidgets只使用一个同时滚动两个不同的QScrollBar. 一种方法是将QScrollBar changeValue()Signal 连接到两者QListWidgets,但我不知道该怎么做。

也欢迎不同的解决方案(但必须有两个QListWidgets

图形用户界面示例

标签: pythonpyqtpyqt5scrollbar

解决方案


您只需要将valueChanged一个列表小部件的滚动条的信号连接到setValue另一个列表小部件的滚动条的方法。这样做会在滚动第一个列表小部件时滚动第二个列表小部件。

您需要对两个列表小部件执行此操作,以便任何列表小部件的滚动都会滚动另一个。

from PyQt5.QtWidgets import QWidget, QHBoxLayout, QListWidget, QApplication


class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.setupUI()
        self.list1.addItems(['Asia Pacific',  'Europe', 'Middle East', 'Africa', 'America']*5)
        self.list2.addItems(['AP', 'EU', 'ME',  'AF', 'AM']*5)
        self.list1.verticalScrollBar().valueChanged.\
            connect(self.list2.verticalScrollBar().setValue)
        self.list2.verticalScrollBar().valueChanged.\
            connect(self.list1.verticalScrollBar().setValue)

    def setupUI(self):
        layout = QHBoxLayout(self)
        self.list1 = QListWidget(self)
        self.list2 = QListWidget(self)
        layout.addWidget(self.list1)
        layout.addWidget(self.list2)
        self.setLayout(layout)


if __name__=="__main__":
    import sys
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

推荐阅读