QListWidget 使用公共数据源同步
QListWidget synchronized using common datasource
我有一个主 window,里面有一个 mdiArea。该地区有 2 个 subwindows,可能更多。我想让每个人都有一个 QListWidget 来共享信息并且它们是同步的。我搜索了但找不到任何帮助。
我在考虑类似静态列表的东西,我想在所有子windows之间共享数据并允许任何人处理它们,一次 1 window
一个 widget 只能有一个 parent 并且它是在属于 parent 的 window 中绘制的,所以你的直接问题的答案是不能。但是我认为在后台你希望几个视图共享相同的数据并同步,如果是这样,解决方案是使用代理,以便几个模型始终共享相同的数据。
在 QListWidget 的情况下,您不能设置模型,但它将用作基础模型,小部件副本 将是 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())
我有一个主 window,里面有一个 mdiArea。该地区有 2 个 subwindows,可能更多。我想让每个人都有一个 QListWidget 来共享信息并且它们是同步的。我搜索了但找不到任何帮助。
我在考虑类似静态列表的东西,我想在所有子windows之间共享数据并允许任何人处理它们,一次 1 window
一个 widget 只能有一个 parent 并且它是在属于 parent 的 window 中绘制的,所以你的直接问题的答案是不能。但是我认为在后台你希望几个视图共享相同的数据并同步,如果是这样,解决方案是使用代理,以便几个模型始终共享相同的数据。
在 QListWidget 的情况下,您不能设置模型,但它将用作基础模型,小部件副本 将是 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())