2016-12-15 14 views
0

ユーザー入力をドロップダウンから取得することでクエリを実行しようとしています。複数のドロップダウンがあり、ユーザーの選択に基づいて後続のドロップダウンを変更したいと考えています。たとえば、2つのドロップダウン州と都市があるとします。誰かが都市を選択した場合、州のドロップダウンには1つの州のみが存在し、誰かが州を選択すると、その州の都市のみが表示されます。特定のクエリを実行してクエリを操作できるように、ユーザーがドロップダウンをクリックしたときに選択する変数にアクセスしようとしていました。しかし、ユーザーが確定ボタンをクリックしてvar.get()の機能を呼び出すときにのみ行うことができます。tkinter pythonで選択した変数にアクセスする方法

conn = pyodbc.connect("{Connection String}") 
cursor = conn.cursor() 


cursor.execute('query to get states;') 
states = cursor.fetcall() 
state_list = [] 
for state in states: 
    state_list.append(state[0]) 


def on_change_selection(value): 
    state = selected_state.get() 
    cursor.execute('select cities from XYZ where state = \'%s\'' %(state)) 
    cities = cursor.fetcall() 
    city_list = [] 
    for city in cities: 
     city_list.append(city[0]) 

    '''At this point I want the city_list to get updated in the already existing drop down option of cities''' 

root = Tk() 
selected_state = StringVar(value=state_list[0]) 
op_state = OptionMenu(root, selected_state, *(state_list), command=on_change_selection) 
op_state.pack() 
select_city = StringVar (value = city_list[0]) 
op_city = OptionMenu(root, selected_city, *(city_list), command=some_function()) 
op_city.pack() 

私が考えていた解決策は、すべての機能の中でウィンドウが新しいオプションで更新されるところでちょうど複雑になりました。私はこれを行うより良い方法があると確信しています。

また、ComboBoxと基本的に多くのフィルタを使用したい場合は、PyQt5を使用することをおすすめしますか?私はかつてGUIを使ったことがありません。前もって感謝します。

答えて

2

OptionMenuは、Buttonと同様のオプションcommand=を持っています。 OptionMenu

import tkinter as tk 

def on_change_selection(value): 
    print(' value:', value) 
    print('selected:', selected.get()) 

root = tk.Tk() 

options = ["one", "two", "three"] 

selected = tk.StringVar(value="one") 

#selected = tk.StringVar() 
#selected.set("one") 

op = tk.OptionMenu(root, selected, *(options), command=on_change_selection) 
op.pack() 

root.mainloop() 
+0

に私が直面しているもう一つの問題は、リストが巨大になった場合、オプションメニューが助けにはならないということであるあなたが選択を変更する機能を毎回実行するために使用されます。私はスクロールバーでComboBoxを使用しようとしています。それに似た 'command = '機能がありますか?ありがとうございました。これはまさに私が探していたものです。 –

+0

'bind()'を使って 'Combobox'に関数を割り当てることができます - [simple example](https://github.com/furas/python-examples/blob/master/tkinter/combobox-get-selection/main) py) – furas

関連する問題