2017-07-11 43 views
0

我正在開發一個迷你GUI項目,我正在努力弄清楚如何從列表中獲取選定值,然後將該值返回給主函數,以便我可以使用該函數價值在別的地方。有人能幫助我嗎 !!!!Python GTK從樹形視圖中獲取選定的值

#### 

    self.device_list_store = gtk.ListStore(str,str,str,str,str) 
    for device in self.get_dev_list(): 
     self.device_list_store.append(list(device)) 

    device_list_treeview = gtk.TreeView(self.device_list_store) 

    selected_row = device_list_treeview.get_selection() 
    selected_row.connect("changed",self.item_selected) 

    #### 

    def item_selected(self,selection): 
     model,row = selection.get_selected() 
     if row is not None: 
      selected_device = model[row][0] 

在此刻,item_selected功能不返回任何東西,我想回到selected_device回到主功能,所以我可以在其他函數中使用它。

編輯:我已經編輯上面的代碼刪除格式錯誤@jcoppens

+0

爲什麼不把'return selected_device'作爲'item_selected'函數的最後一行。並閱讀[一些基本的Python教程](https://docs.python.org/3/tutorial/index.html)和[Gtk教程](https://python-gtk-3-tutorial.readthedocs。 IO /)? – jcoppens

+0

感謝您的回覆,我試着返回selected_device,並調用主函數中的item_selected函數,它不起作用,錯誤消息說TypeError:item_selected()只需要2個參數(給出1)。我可以理解,我需要將一些參數傳遞給該函數,但問題是我不知道該函數需要使用哪些參數,希望這對您有意義。 –

回答

0

As you can see in the documentation,該item_selected函數調用一個參數,tree_selection。但是如果你在一個類中定義函數,它也需要self參數,通常這個參數是自動添加的。在你的(令人困惑的)例子中,沒有定義類,所以我懷疑問題是你的程序不完整。

而且,我懷疑你不想在device_list_treeview = gtk.T... for循環:

for device in self.get_dev_list(): 
     self.device_list_store.append(list(device)) 
     device_list_treeview = gtk.TreeView(self.device_list_store) 

而且我懷疑你想selected_device = mod...縮進if如下:

if row is not None: 
selected_device = model[row][0] 

請轉換在你的榜樣完整的程序,並正確格式化。

順便說一句:item_selected不是信號處理程序的好名字。如果該項目未被選中,這也被稱爲(這就是爲什麼信號被稱爲「改變」)!

而且重要:即使你應該首先閱讀basic Python tutorialsGtk tutorials,則應考慮使用lazka's excellent reference for all the Python APIs。網頁上有一個鏈接可以完全下載它,並將它放在您的電腦中。

+0

非常感謝你,現在這個問題已經解決了。我將閱讀您建議的培訓材料,以確保涵蓋所有這些基本內容。 –

+0

太好了。我編輯了您的原始問題以刪除格式問題。 – jcoppens