1

長い間検索した後、Tab キーを使用してツリービュー グリッドのセル間を移動し、編集モードでセルを管理するソリューション (非常に簡単) を見つけました。

ここで問題が発生しました。セル編集の確認は、Enter キーを押した後にのみ発生します。Tab キーを押すと、editing_canceled イベントがトリガーされたように見えます。

それを解決する方法は?タブキー押下でもデータ確認を許可するには?

これは、treeview key-press-event のイベント ハンドラーです。

def key_tree_Tab(self, treeview, event,namewidget):
    path, col = treeview.get_cursor() 
    ## only visible columns!! 
    columns = [c for c in treeview.get_columns() if c.get_visible()] 
    colnum = columns.index(col)     

    if event.keyval==65289:

        if colnum + 1 < len(columns): 
            next_column = columns[colnum + 1]               
            treeview.set_cursor(path,next_column,start_editing=True)                                    


        else: 
            tmodel = treeview.get_model() 
            titer = tmodel.iter_next(tmodel.get_iter(path)) 
            if titer is None: 
                titer = tmodel.get_iter_first() 
            path = tmodel.get_path(titer) 
            next_column = columns[0] 
            treeview.set_cursor(path,next_column,start_editing=True)

    return True

ありがとうございます!!!!

4

2 に答える 2

1

偉大な人が解決策を見つけました: gobject タイムアウトから set_cursor メソッドを呼び出します!!!

pygtk から pygobject に移植し、以前のメソッドの投稿でそれを適応させました。

だから、それを必要とするすべての人のために、コード:

def key_tree_Tab(self, treeview, event,namewidget):
    keyname = Gdk.keyval_name(event.keyval)

    path, col = treeview.get_cursor() 
    ## only visible columns!! 
    columns = [c for c in treeview.get_columns() if c.get_visible()] 
    colnum = columns.index(col)     


    if keyname=="Tab" or keyname=="Esc":

        if colnum + 1 < len(columns): 
            next_column = columns[colnum + 1]               

        else: 
            tmodel = treeview.get_model() 
            titer = tmodel.iter_next(tmodel.get_iter(path)) 
            if titer is None: 
                titer = tmodel.get_iter_first() 
            path = tmodel.get_path(titer) 
            next_column = columns[0] 


        if keyname == 'Tab':
            #Thank you Jordan!!!!!! Great hack!
            GLib.timeout_add(50,
                            treeview.set_cursor,
                            path, next_column, True)
        elif keyname == 'Escape':
            pass

これらの美しいハックを提供してくれた Jordan Callicoat に本当に感謝します!

ご挨拶。

于 2013-03-22T09:16:44.713 に答える