2016-09-26 26 views
0

我有一個問題,確定是否是動態創建的複選框被選中或在一個簡單的GUI我已經創建用戶選中。訪問動態創建QStandardItems的財產PyQt5

我修改了相關的代碼並粘貼在下面。儘管創建並命名4個QStandardItems可能很容易,但我正在處理很多包含許多不同項目的列表,這些項目發生了很大變化,所以自己創建它們並不是真的可行。

任何找出如何訪問這些屬性的幫助,將不勝感激。

from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 

class Splash(QWidget): 
    def __init__(self): 
     super().__init__() 

     # imagine this is a very long list... 
     self.seasons = ['summer','autumn','winter','spring'] 

     self.initUI() 

    def initUI(self): 
     layout = QVBoxLayout() 

     list = QListView() 
     model = QStandardItemModel() 
     list.setModel(model) 

     printbtn = QPushButton('print values') 
     printbtn.clicked.connect(self.print_action) 

     for season in self.seasons: 
      item = QStandardItem(season) 
      item.setCheckable(True) 
      model.appendRow(item) 

     model.dataChanged.connect(lambda: self.print_action(item.text())) 


     layout.addWidget(printbtn) 
     layout.addWidget(list) 

     self.setLayout(layout) 
     self.show() 

    def print_action(self, item): 
     print('changed', item) 

if __name__ == '__main__': 
    import sys 
    app = QApplication(sys.argv) 
    ex = Splash() 
    sys.exit(app.exec_()) 

總之 - 當項已通過model.dataChanged以及連接到功能檢查我能察覺,但它不能季節區分。

回答

0

如果保持到列表(或模型)的參考,您可以搜索的項目由他們的文字,然後讓他們檢查狀態:

def print_action(self): 
    model = self.list.model() 
    for text in 'summer', 'autumn', 'winter', 'spring': 
     items = model.findItems(text) 
     if items: 
      checked = items[0].checkState() == Qt.Checked 
      print('%s = %s' % (text, checked)) 
+0

輝煌,正是我正在尋找的。 – yvesva

0

看來你要當一個項目的checkState已更改爲得到通知。

在我看來,有兩種可能。

第一種方式,QMODEL會發出「dataChanged」刷新視圖,因此您可以連接,這意味着一個項目的checkState可能會改變的信號。

model.dataChanged.connect(self.test) 

def test(self): 
    pass 

第二種方式,使用計時器通知自己,你自己檢查它。

timer = QTimer() 
timer.timeout.connect(self.test) 
timer.start(1000) 
+0

我很抱歉,我很難理解如何使用你的答案,我將能夠推導出四個QStandardItem的checkstate中的每一個。你介意闡述嗎? – yvesva

+0

你的意思是說你想打印該物品的checkState和季節? –

+0

打印這個問題的目的,但爲了我正在寫的內容,我只需要知道用戶是否已經檢查過該盒子/盒子的檢查狀態。 – yvesva