0

次のようなオートコンプリートが設定された小さなGUIがあります。

    completion_liststore = create_completion_model()
    completion = Gtk.EntryCompletion()
    completion.set_model(completion_liststore)
    completion.set_text_column(0)
    completion.set_match_func(match_anywhere, None)
    builder.get_object('student_change').set_completion(completion)
    completion.connect('match-selected', self.populate_main)

完了モデルとマッチングは、私のハンドラークラスでは次のようになります。

def create_completion_model():
    db = sqlite3.connect('gradebook.db')
    cursor = db.cursor()
    cursor.execute('SELECT * from students')
    students = cursor.fetchall()
    names = Gtk.ListStore(str)
    for student in students:
        names.append([student[5]])
    cursor.close()
    return names


def match_anywhere(completion, entrystr, iter, data):
    modelstr = completion.get_model()[iter][0]
    return entrystr in modelstr.lower()

非常に簡単で、うまく機能します。私がやりたいのは、populate_main関数を直接呼び出すことですが、オートコンプリートを介してのみ機能するようです。私のpopulate_main関数は次のようになります:

    def populate_main(self, completion, treemodel, treeiter):
        name = treemodel[treeiter][completion.get_text_column()]
        db = sqlite3.connect('gradebook.db')
        db.row_factory = dict_factory
        cursor = db.cursor()
        t = (name,)
        cursor.execute('SELECT * from students WHERE name=?', t)
        .... <-- and so on, filling in my form

新しい関数にコピー/貼り付けして名前を関数に送信するだけで、この関数を再利用する方法はありますか?

4

0 に答える 0