Измените OptionMenu на основе того, что выбрано в другом OptionMenu, и используйте этот выбор для извлечения данных из базы данных. - PullRequest
1 голос
/ 14 марта 2020

Я пытаюсь создать раскрывающееся меню, чтобы выбрать элемент из списка, и использовать этот элемент, чтобы выбрать второй элемент из другого списка и, наконец, использовать последний для извлечения данных из базы данных. Теперь я могу выбрать первое меню, но по какой-то причине я не могу сделать это со вторым меню. что бы я ни менял, выбор всегда остается таким, какой я его установил.

import tkinter as tk

station =""


def chosse_station(*args):

    global segments_list, list1, list2, station_choose,  root,stations_list
    #print (segments_list)
    print (segment.get())
    if segment.get() == segments_list[0]:
        stations_list = list1

    else:
        stations_list = list2



    station = tk.StringVar(root)
    station.set("choose a station")
    opt1 = tk.OptionMenu(root, station, *stations_list)
    opt1.pack()
    opt1.place(bordermode='outside', rely=00.13, relx=0.10, height=50, width=200)
    station_choose = station.get()
    print (station.get())
    station.trace("w", choose_meter)


def choose_meter(*args):

    global segments_list, list1, list2, Tags_list, Data , station_choose
    print(segment.get())
    print(station_choose)

    Tags_list = Data[station_choose]
    tag = tk.StringVar(root)
    tag.set(Data[station_choose][0])
    opt1 = tk.OptionMenu(root, tag, *Tags_list)

    opt1.pack()
    opt1.place(bordermode='outside', rely=00.13, relx=0.25, height=50, width=200)
    print(Data[station_choose])
    print(tag.get())





FIELD_TAG_DATA_RAW =0

date = '03/08/2020'
chosen_date = {}
segments_list = ['Magpie - Bicentannial', 'Dickenson H22 - Dodge']
list1 = ['Magpie' , 'Bicentannial' , 'Trottor']
list2 = ['Dickenson' , 'Dodge']
Magpie = ['Error', 'DATA[2]', 'DATA[3]', 'DATA[1]', 'DATA[9]','DATA[4]']
Trottor = ['_Error', 'DATA[5]', 'DATA[6]', 'DATA[7]', 'DATA[8]']
Bicentannial=['_Error1', 'DATA[36]', 'DATA[39]', 'DATA[40]']
Dickenson = ['Error', 'DATA[12]', 'DATA[13]', 'DATA[11]', 'DATA[19]','DATA[14]']
Dodge = ['Error', 'DATA[42]', 'DATA[43]', 'DATA[41]', 'DATA[43]','DATA[44]']
Data = {'Magpie': Magpie, 'Bicentannial': Bicentannial, 'Trottor': Trottor,'Dickenson': Dickenson , 'Dodge': Dodge }


Name = 'REAL_DATA[8]'

root = tk.Tk()
canvas = tk.Canvas(root, height=950, width=1600, bg= '#263D42')
canvas.pack()



frame= tk.Frame(root, bg='white')
frame.place(relwidth=0.8, relheight=0.8, relx=0.1, rely=0.15)


segment = tk.StringVar(root)
segment.set(segments_list[0])
opt = tk.OptionMenu(root, segment, *segments_list)
#print(segment.get())
segment.trace("w", chosse_station)

opt.place(bordermode='outside' ,rely = 00, relx = 0.10,height=50, width=200)

sations_list =list1
Tags_list=[]


root.mainloop()

1 Ответ

1 голос
/ 14 марта 2020

Вы связываете неправильное stringvar для второго OptionMenu, и вы не использовали global для определения его в другой функции.

Теперь ваш код должен быть:

import tkinter as tk

station =""


def chosse_station(*args):

    global segments_list, list1, list2, station_choose,  root,stations_list, station
    #print (segments_list)
    print (segment.get())
    if segment.get() == segments_list[0]:
        stations_list = list1

    else:
        stations_list = list2



    station = tk.StringVar(root)
    station.set("choose a station")
    opt1 = tk.OptionMenu(root, station, *stations_list)
    opt1.pack()
    opt1.place(bordermode='outside', rely=00.13, relx=0.10, height=50, width=200)
    station_choose = station.get()
    print (station.get())
    station.trace("w", choose_meter)


def choose_meter(*args):

    global segments_list, list1, list2, Tags_list, Data , station_choose, station
    print(segment.get())
    print(station.get())

    Tags_list = Data[station.get()]
    tag = tk.StringVar(root)
    tag.set(Data[station.get()][0])
    opt1 = tk.OptionMenu(root, tag, *Tags_list)

    opt1.pack()
    opt1.place(bordermode='outside', rely=00.13, relx=0.25, height=50, width=200)
    print(Data[station.get()])
    print(tag.get())





FIELD_TAG_DATA_RAW =0

date = '03/08/2020'
chosen_date = {}
segments_list = ['Magpie - Bicentannial', 'Dickenson H22 - Dodge']
list1 = ['Magpie' , 'Bicentannial' , 'Trottor']
list2 = ['Dickenson' , 'Dodge']
Magpie = ['Error', 'DATA[2]', 'DATA[3]', 'DATA[1]', 'DATA[9]','DATA[4]']
Trottor = ['_Error', 'DATA[5]', 'DATA[6]', 'DATA[7]', 'DATA[8]']
Bicentannial=['_Error1', 'DATA[36]', 'DATA[39]', 'DATA[40]']
Dickenson = ['Error', 'DATA[12]', 'DATA[13]', 'DATA[11]', 'DATA[19]','DATA[14]']
Dodge = ['Error', 'DATA[42]', 'DATA[43]', 'DATA[41]', 'DATA[43]','DATA[44]']
Data = {'Magpie': Magpie, 'Bicentannial': Bicentannial, 'Trottor': Trottor,'Dickenson': Dickenson , 'Dodge': Dodge }


Name = 'REAL_DATA[8]'

root = tk.Tk()
canvas = tk.Canvas(root, height=950, width=1600, bg= '#263D42')
canvas.pack()



frame= tk.Frame(root, bg='white')
frame.place(relwidth=0.8, relheight=0.8, relx=0.1, rely=0.15)


segment = tk.StringVar(root)
segment.set(segments_list[0])
opt = tk.OptionMenu(root, segment, *segments_list)
#print(segment.get())
segment.trace("w", chosse_station)

opt.place(bordermode='outside' ,rely = 00, relx = 0.10,height=50, width=200)

sations_list =list1
Tags_list=[]


root.mainloop()
...