2

PAGE という GUI エディターを使用して簡単な GUI を作成しました。2 つの Tkinter.ttk コンボ ボックスが含まれています。私の最初のコンボ ボックスは、接続された sqlite データベース テーブルから列名として値を取得します。最初のコンボ ボックスから列名を選択すると、2 番目のコンボ ボックスは最初の値に関連する値を自動的に更新する必要があります。

ところで、以下の私のコードは、この現在の状態で正しく機能します。最初のコンボ ボックスから値を選択すると、その値がインタラクティブ シェルに出力されます。ただし、これらの値は 2 番目のコンボ ボックスに挿入する必要があります。どうすればそれを理解できるか知っている人はいますか?

どんな助けでも大歓迎です。前もって感謝します...

ここに私のGUIコードがあります:

from pysqlite2 import dbapi2 as db
from Tkinter import *
import ttk

def getdata():
    global colnames
    conn = db.connect("blabla.sqlite")
    cur = conn.execute("select * from states")
    col = cur.description
    colnames = [abu[0] for abu in col]
initcombo = getdata()

def vp_start_gui():

    global val, w, root
    root = Tk()
    root.title('Linked Comboboxes')
    root.geometry('301x230+556+208')
    set_Tk_var()
    w = New_Toplevel_1 (root)
    init()
    root.mainloop()

w = None
def create_New_Toplevel_1 (root):

    global w, w_win
    if w: 
        return
    w = Toplevel (root)
    w.title('New_Toplevel_1')
    w.geometry('301x230+556+208')
    set_Tk_var()
    w_win = New_Toplevel_1 (w)
    init()
    return w_win

def destroy_New_Toplevel_1 ():
    global w
    w.destroy()
    w = None


def set_Tk_var():

    global combobox
    combobox = StringVar()


def init():
    pass


class New_Toplevel_1:
    def __init__(self, master=None):

        style = ttk.Style()
        theme = style.theme_use()
        default = style.lookup(theme, 'background')
        master.configure(background=default)


        def choose1(event=None):
            conn2 = db.connect("blabla.sqlite")
            cur2 = conn2.execute("select %s from states" % self.TCombobox1.get())
            results = cur2.fetchall()
            for row in results:
                print row


        self.TCombobox1 = ttk.Combobox (master, state='readonly')
        self.TCombobox1.place(relx=0.03,rely=0.13,relheight=0.09,relwidth=0.48)
        self.TCombobox1["values"] = colnames
        self.TCombobox1.set("Choose one...")
        self.TCombobox1.bind("<<ComboboxSelected>>", choose1)

        self.TCombobox2 = ttk.Combobox (master, state='readonly')
        self.TCombobox2.place(relx=0.03,rely=0.33,relheight=0.09,relwidth=0.48)


        self.TLabel1 = ttk.Label (master)
        self.TLabel1.place(relx=0.03,rely=0.83,height=19,width=28)
        self.TLabel1.configure(relief="flat")
        self.TLabel1.configure(text='''Info:''')

        self.TButton1 = ttk.Button (master)
        self.TButton1.place(relx=0.63,rely=0.22,height=25,width=76)
        self.TButton1.configure(takefocus="")
        self.TButton1.configure(text='''Run''')


if __name__ == '__main__':
    vp_start_gui()
4

1 に答える 1

2

2 番目のコンボボックスの「値」構成の値として「結果」を設定します。

def choose1(event=None):
        conn2 = db.connect("blabla.sqlite")
        cur2 = conn2.execute("select %s from states" % self.TCombobox1.get())
        results = cur2.fetchall()
        self.TCombobox2['values'] = results
        for row in results:
            print row
于 2012-11-30T23:07:47.013 に答える