2010-08-24 3 views
3

은 내가 트 리뷰를 가지고 있고 그것을 클릭하면, 나는 오류가 나타납니다PyGtk - 트 리뷰 및 선택한 행

Traceback (most recent call last): 
    File "pyparty.py", line 76, in get_selected_user 
    self.selected_user = tree_model.get_value(tree_iter, 0) 
TypeError: iter must be a GtkTreeIter 

그것은 바로 첫 번째 클릭에 대한 일을. 그 후 그것은 잘 작동합니다. 나는 틀린 것을 모른다.

#! /usr/bin/python 

import gtk 
import pygtk 
pygtk.require('2.0') 
import os 
import add_user 
import user_commands_wrapper 

class PyParty: 
    def __init__(self): 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     self.window.set_title('PyParty') 
     self.window.set_position(gtk.WIN_POS_CENTER) 
     self.window.set_border_width(5) 

     self.window.connect('delete_event', self.closeWindow) 

     self.table = gtk.Table(5, 2, False) 

     self.title_label = gtk.Label('Users') 
     self.add_button = gtk.Button('Add') 
     self.edit_button = gtk.Button('Edit') 
     self.delete_button = gtk.Button('Delete') 
     self.exit_button = gtk.Button('Exit') 

     self.add_button.connect('clicked', self.addUser) 

     self.tree_store = gtk.TreeStore(str, str) 

     #Remover passagem de valores para o construtor 
     for user in user_commands_wrapper.User('', '').get_all_users(): 
      self.tree_store.append(None, [user.pw_name, user.pw_gecos]) 

     self.tree_view = gtk.TreeView(self.tree_store) 
     self.tree_view.connect('button_press_event', self.get_selected_user) 

     self.username_tree_view_column = gtk.TreeViewColumn('username') 
     self.realname_tree_view_column = gtk.TreeViewColumn('realname') 

     self.tree_view.append_column(self.username_tree_view_column) 
     self.tree_view.append_column(self.realname_tree_view_column) 

     self.username_cell = gtk.CellRendererText() 
     self.username_tree_view_column.pack_start(self.username_cell, True) 
     self.username_tree_view_column.add_attribute(self.username_cell, 'text', 0) 

     self.realname_cell = gtk.CellRendererText() 
     self.realname_tree_view_column.pack_start(self.realname_cell, True) 
     self.realname_tree_view_column.add_attribute(self.realname_cell, 'text', 1) 

     self.table.attach(self.title_label, 0, 2, 0, 1) 
     self.table.attach(self.tree_view, 0, 1, 1, 5) 
     self.table.attach(self.add_button, 1, 2, 1, 2) 
     self.table.attach(self.edit_button, 1, 2, 2, 3) 
     self.table.attach(self.delete_button, 1, 2, 3, 4) 
     self.table.attach(self.exit_button, 1, 2, 4, 5) 

     self.window.add(self.table) 

     self.window.show_all() 
     gtk.main() 

    # Callback methods 
    def closeWindow(self, widget, data = None): 
     print self.selected_user 
     gtk.main_quit() 

    def addUser(self, widget, data = None): 
     add_user.AddUser() 

    def get_selected_user(self, widget, data = None): 
     selection = self.tree_view.get_selection() 
     selection.set_mode(gtk.SELECTION_SINGLE) 
     tree_model, tree_iter = selection.get_selected() 
     self.selected_user = tree_model.get_value(tree_iter, 0) 

if __name__ == '__main__': 
    # Remover 
    if os.getenv('USER') == 'root': 
     PyParty() 
    else: 
     print 'Only root can run that!' 

답변

5

내가 잘못된 신호를 사용했다 : 다음은 코드입니다.

self.tree_view.connect('cursor-changed', self.get_selected_user) 

당신에게

감사 :이 오른쪽이다