Используется cb1.bind('<<ComboboxSelected>>', on_select)
для выполнения функции on_select
при первом изменении страны Combobox
.И эта функция изменяет значения в секунду Combobox
.
from tkinter import *
from tkinter.ttk import Combobox
data = {
"EMEA": [1105,1106],
"ASIA": [3565,2445, 126464, 1145454],
"AMERICA": [56464 ,5679, 55346],
}
def on_select(event):
selecte_value = event.widget.get()
if selecte_value in data:
cb2['values'] = data[selecte_value]
else:
cb2['values'] = all_values
country = list(data.keys())
all_values = sorted(sum(data.values(), []))
window = Tk() # only one main window `Tk()`, to create second window use `Toplevel()`
cb1 = Combobox(window, values=country)
cb1.bind('<<ComboboxSelected>>', on_select)
#cb1.bind('<Return>', on_select) # pressed ENTER
cb1.pack()
cb2 = Combobox(window, values=all_values)
cb2.pack()
window.mainloop() # only one main loop, even if you have many windows
РЕДАКТИРОВАТЬ: код с Button
, который получает значения из Combobox
.Он также хранит его в глобальных переменных, поэтому эти значения сохраняются даже после закрытия окна.
from tkinter import *
from tkinter.ttk import Combobox
# -- functions ---
def on_select(event):
selecte_value = event.widget.get()
if selecte_value in data:
cb2['values'] = data[selecte_value]
def on_quit():
# keep values in global variables
# to have these values even after closing window (after mainloop)
global selected_country
global selected_value
selected_country = cb1.get()
selected_value = cb2.get()
print('--- before closing window ---')
print('cb1:', selected_country)
print('cb2:', selected_value)
#print('cb1:', cb1.get())
#print('cb2:', cb2.get())
window.destroy() # destroy works better then quit, in some system quit doesn't close main window
# -- data --
data = {
"BE": [1201,1202,1203],
"CH": [2501,2502,2503,2504,2506,2507,2508,2505],
"DE": [1501,1502,1503,1504,1505,1506,1507,1508,1509],
"ES": [2801,2803,2804,2805,2806,2808,2810],
"AU": [6114,6116,6122,6124,6126,6128,6130,6132,6108,6112,6140],
"CN": [5102,5127,5128,5129,5131,5132,5134,5135,5138,5139,5142,5143,5144,5103,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5120,5121,5123,5125,5126,5147,5148,5149,5150,5145,5146,5155],
"CA": [3002,3143,3004,3005,3008,3010],
"GB": [1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1114],
"HK": [5431,5447,5408,5411,5428,5417,5418,5420],
"IE": [1150],
"IT": [2707,2712],
"JP": [4146,4150,4154,4145,4132,4135,4136,4138,4140,4141,4142,4144,4160,4166,4169,4170,4171,4172,4174,4176,4180,4181,4183,4186,4106,4111,4112,4113,4116,4120,4130],
"LU": [1206],
"MO": [5523,5533,5534,5536,5538,5539],
"NL": [1221,1222,1223],
"RO": [2606],
"SG": [6407,6408,6409,6410,6411],
}
country = list(data.keys())
all_values = sorted(sum(data.values(), []))
# -- main ---
window = Tk()
window.geometry("300x250+10+10")
frame = Frame(window)
frame.pack(side="left")
cb1 = Combobox(frame, values=country)
cb1.bind('<<ComboboxSelected>>', on_select)
#cb1.bind('<Return>', on_select) # if someone will write text in Combobox and press ENTER
cb1.pack()
cb2 = Combobox(frame, values=all_values)
cb2.pack()
button = Button(window, text="SUBMIT", fg="red", command=on_quit)
button.pack(side="left")
window.mainloop()
# access selected values after closing window
print('--- after closing window ---')
print('cb1:', selected_country)
print('cb2:', selected_value)