2011-04-17 5 views
1

私はbutton_press_eventへの接続を持つツリービューを使用するpygtkアプリケーションを作成しています。私が理解できないのは、ツリービュー(クリックされた行)に関する情報をgtk.Menuまたは別の方法に渡す方法です。 row-activatedシグナルを使用した場合、行と列の情報が引数として渡されますが、これはbutton_press_eventでは発生しません。私はその後、self.joinGameself.blacklistServer方法にクリックされた行から情報を渡す必要がありますが、どちらかこれを行う方法がわからないpygtkのbutton_press_eventからのツリービュー情報の送信

self.liststore = gtk.ListStore(str,int, int, int,str, 'gboolean') 
    self.treeview = gtk.TreeView(self.liststore) 

    self.treeview.connect("button_press_event",self.serverListEvent) 
    self.treeview.set_search_column(0) 
    self.draw_columns(self.treeview) 

    self.blackmenu = gtk.Menu() 
    self.bitem = gtk.MenuItem("Blacklist server") 
    self.blackmenu.append(self.bitem) 
    self.bitem.connect("activate",self.blacklistServer) 
    self.bitem.show() 

def serverListEvent(self,treeview,event): 
    x = int(event.x) 
    y = int(event.y) 
    time = event.time 
    model = treeview.get_model() 

    pthinfo = treeview.get_path_at_pos(x, y) 
    if pthinfo is not None: 
     path, col, cellx, celly = pthinfo 
     # Error here for the model with the column 
     print 'url clicked '+model[col][0] 
     treeview.grab_focus() 
     treeview.set_cursor(path, col, 0) 
     # Popup blacklist menu on right click 
     if event.button == 3:    
      self.blackmenu.popup(None, None, None, event.button, time) 
     # Join game on double click 
     elif event.type == gtk.gdk._2BUTTON_PRESS: 
      self.joinGame(treeview,model[col][0]) 
    return True 

:ここで問題のコードです。

答えて

2

私は厄介なことを覚えています。私はどれもmode of selectionが好きであれば、set up my treeview's gtk.TreeSelectionになります。そして、この:

def get_selected_ids(self): 
    ids = [] 
    store, paths = self.get_selection().get_selected_rows() 

    # self.adapter is a mapping class from my data-model to a model column index. 
    # If you know the column index from your gtk.ListStore, you don't need it. 
    colindex = self.adapter.get_column_modelindex("id") 

    for path in paths: 
     treeiter = store.get_iter(path) 
     # Pull value from liststore 
     val = store.get_value(
      treeiter, 
      colindex 
     ) 
     ids.append(val) 
    return ids 

編集:

私はgtk.Menuとgtk.MenuItemを使用したことがないので、私はあなたがすでにあなたのメニューは、コールバック(blacklistServer)に接続されていたことを取得できませんでした。これはテストされていませんが、アイデアを与える必要があります。

def blacklistServer(self, menuitem, *ignore): 
    # you have to modify *get_selected_ids* so it returns the values you need for 
    # blacklisting. 
    values = self.get_selected_ids() 
    blacklist = set(values) 
    self.saveBlacklist(blacklist) 
+0

どのような行が選択されているかに関するこの情報をポップアップメニューに渡すにはどうすればよいですか? –

+0

私は考えることができる2つの方法:あなたは、ツリービューでカスタム信号を登録し、あなたのポップアップにそれに耳を傾けることができます。また、ポップアップへの参照を保持している場合は、値を直接またはメソッドで設定できます。 – XORcist

+0

私は実際にここにこだわっているので、いくつかの例のコードを与えることができます。 –

関連する問題