有一個包含三個鍵的字典:'Animals','Birds'和'Fish'。什麼設計邏輯與鏈接的ViewLists一起使用
主對話框有兩個列表視圖。左側視圖viewA
顯示上述鍵的列表。 當其中一個項目被點擊時,正確的視圖viewB
顯示物種的列表。
問題是如何管理viewB
的顯示...假設用戶點擊「動物」:listB
繼續,併爲列表中的每個動物構建一個全新的QListWidgetItem列表。然後用戶點擊「鳥」。我應該怎麼做已經建立viewB
的「動物」項目?我應該隱藏它們嗎? (隱藏「動物」項目(而不是刪除)將允許我稍後再次點擊「動物」時隱藏它們(如果ListItems在圖形上很重:拇指,圖標等,則總是有意義的。如果動物列表是1000+將從頭開始重建ListItems,並取消隱藏最後一次點擊構建的區別)
我看到的另一種方法是用戶viewB.clear()
每次點擊viewA
的項目,因此listB
項目每隔時間listA
項目被點擊,但正如我與項目的一長串提到它可能是很慢。什麼邏輯在這樣的情況下實現?
from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
layout=QtGui.QHBoxLayout()
self.setLayout(layout)
self.viewA=QtGui.QListWidget()
self.viewA.addItems(elements.keys())
self.viewA.itemClicked.connect(self.aClicked)
self.viewB=QtGui.QListWidget()
layout.addWidget(self.viewA)
layout.addWidget(self.viewB)
self.show()
def aClicked(self, item):
key='%s'%item.text()
values=elements.get(key)
items=[QtGui.QListWidgetItem(val) for val in values]
result=[self.viewB.addItem(item) for item in items]
elements={'Animals':['Bison','Panther','Elephant'],'Birds':['Duck','Hawk','Pigeon'],'Fish':['Shark','Salmon','Piranha']}
window=Window()
sys.exit(app.exec_())
請使用我的示例代碼來說明你的想法。沒有看到如何將它放在一起,很難理解這個概念。提前致謝! – alphanumeric 2014-09-11 06:11:20
Sputnix,請閱讀@Ezee在他的回答中鏈接到的Model/View編程文檔。 「研究這個概念」後研究起來容易得多,而不是讓某人爲你做這些工作! – TheDarkKnight 2014-09-11 08:28:25
我發佈的例子只有22行。爲了說明這個概念,需要花多長時間進行編輯?這個論壇不僅僅是指向文檔。 – alphanumeric 2014-09-11 14:02:44