QListWidget使用公共数据单元同步

2024-03-29 12:05:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个主窗口,里面有一个区域。该区域有两个子窗口,可能更多。我希望每个人都有一个QListWidget来共享信息,并且它们是同步的。我搜索了一下,但找不到任何帮助。你知道吗

我在想一个类似静态列表的东西,我想在所有子窗口之间共享数据,并允许任何人一次处理一个窗口


Tags: 数据信息区域列表静态qlistwidget
4条回答

一个小部件只能有一个父部件,并且它是在属于父部件的窗口中绘制的,因此直接问题的答案是它不能。但我认为在后台,您希望多个视图共享相同的数据并进行同步,如果是这样,解决方案是使用代理,以便多个模型始终共享相同的数据。你知道吗

在QListWidget的情况下,您不能设置一个模型,但它将被用作基础,而widgets副本将是QListView。你知道吗

from PyQt5 import QtCore, QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        mdiarea = QtWidgets.QMdiArea()
        self.setCentralWidget(mdiarea)

        list_widget = QtWidgets.QListWidget()
        for i in range(10):
            it = QtWidgets.QListWidgetItem('item {}'.format(i))
            it.setFlags(it.flags() | QtCore.Qt.ItemIsEditable)
            list_widget.addItem(it)

        sub_window = QtWidgets.QMdiSubWindow()
        sub_window.setWidget(list_widget)
        mdiarea.addSubWindow(sub_window)

        for _ in range(4):
            list_view = self.create_qlistview(list_widget.model())
            sub_window = QtWidgets.QMdiSubWindow()
            sub_window.setWidget(list_view)
            mdiarea.addSubWindow(sub_window)

    def create_qlistview(self, model):
        proxy = QtCore.QIdentityProxyModel()
        proxy.setSourceModel(model)
        list_view = QtWidgets.QListView()
        list_view.setModel(proxy)
        return list_view

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec())

相关问题 更多 >