0

おそらく、私は Python と GTK の両方の初心者ではありません。ここで私の問題: 検索バーとツリービューを含むウィンドウを表示するクラスを作成しました。SQLITEDB から読み取ったツリーを埋めます。

罰金。

ツリービュー内の項目を選択するために検索バーを使用したいと思います (データベース検索を実行し、結果をツリービューに入力します)

ユーザーが挿入したデータを特定の関数に渡す方法を理解できないため、コールバックでブロックされています。私の(STUPID)コードからのいくつかの行の下。

class SecondWin:
    def __init__(self):
        self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.win.connect("delete_event", self.delete_event)
        self.win.set_title("Gmail Phonebook")
        self.win.set_size_request(600, 300) #Larghez1za, Altezza
        self.win.set_border_width(8)
        self.win.set_position(gtk.WIN_POS_CENTER)
        self.win.connect("destroy", self.destroy)

        self.table = gtk.Table(8, 8,True)

        self.cerca_bottone = gtk.Button("Cerca")
        self.cerca_bottone.set_size_request(70, 30) #Larghezza, Altezza
        self.cerca_bottone.connect( "clicked", self.cercainrubrica) #Call back sul bottone
        self.table.attach(self.cerca_bottone, 0, 1, 0, 1,gtk.SHRINK,gtk.SHRINK)

#       Search BAR
        self.hbox = gtk.HBox()
        self.entry = gtk.Entry(30) 
        self.entry.connect("activate", self.cercainrubrica) #call back su enter
        self.hbox.pack_end(self.entry)
        self.table.attach(self.hbox, 1, 8, 0, 1,gtk.EXPAND|gtk.FILL|gtk.SHRINK,
                      gtk.EXPAND|gtk.FILL|gtk.SHRINK,0,0)

        self.vbox = gtk.VBox(False, 8)
        self.sw = gtk.ScrolledWindow()
        self.sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.vbox.pack_start(self.sw, True, True, 0)
        self.table.attach(self.vbox, 1, 8, 1, 9,gtk.EXPAND|gtk.FILL|gtk.SHRINK,
                      gtk.EXPAND|gtk.FILL|gtk.SHRINK,10,10)  

        rubrica=mydb.find_record_complex("%", colonne_test[0]) 

        store = self.create_model(rubrica) #THIS WORK FINE DISPLAYING THE SELECTION

        HERE MY FUNCION

        self.cercainrubrica ??

        treeView=gtk.TreeView(store)
        treeView.connect("row-activated", self.on_activated)
        treeView.set_rules_hint(True)
        self.sw.add(treeView)
        self.create_columns(treeView,nomi_colonne)
        self.statusbar = gtk.Statusbar()



        self.win.add(self.table)
        self.win.show_all()

THIS IS MY CALL BACK
    def cercainrubrica( self, w, data=None):
        name = self.entry.get_text()
        capperi=mydb.find_record_complex(name, colonne_test[0]) 
        store = self.create_model(capperi)

        return store



    def delete_event(self, widget, event, data=None):
        return gtk.FALSE
    def destroy(self, widget, data=None):
        return gtk.main_quit()
    def main(self):
        gtk.main()
    def create_model(self,records):
        store = gtk.ListStore(str, str, str,str)

        for record in records:
            store.append([record[1], record[2], record[3],record[4]])

        return store

    def create_columns(self, treeView,intestazione_colonne):

        i = 0
        for nomecolonna in intestazione_colonne:
            rendererText = gtk.CellRendererText()
            column = gtk.TreeViewColumn(intestazione_colonne[i], rendererText, text=i)
            column.set_sort_column_id(i)    
            treeView.append_column(column)
            i += 1

    def on_activated(self, widget, row, col):

        model = widget.get_model()
        text = model[row][0] + ", " + model[row][1] + ", " + model[row][2]
        self.statusbar.push(0, text)    

if __name__ == "__main__":
    second = SecondWin()
    second.main()

どんな助けも本当に感謝しています

4

1 に答える 1

0

何をしたいのか 100% 確信があるわけではありませんが、入力したテキストに基づいてツリービューに表示されているものをフィルタリングしたい場合は、GtkTreeModelFilterを見てください。これを TreeModel として使用し、入力したテキストに基づいて行を表示するかどうかを決定する独自の VisibleFunc を設定できます。テキストが変更されたら、 refilter(): を呼び出すだけで、すべての行に対して VisibleFunc() が呼び出されます。

Pythonの例やドキュメントがなくて申し訳ありませんが、それでも役立つことを願っています...

于 2013-10-23T14:58:17.430 に答える