多个 Tkinter 组合框,其中显示的值取决于用户在其他框中的选择
Multiple Tkinter Comboboxes where the displayed values depend on the user-choice in the other boxes
假设我得到了以下字典:
dict = {'A': [1,2,3], 'B': [4,5,6]}
有了这个字典和两个组合框,用户可能会得到一个特定的组合,例如A-1.问题是像A-5或B-1这样的选项不应该可以选择。
于是想到了下面的实现方式。如果用户在第一个框中选择 'A',则第二个框中的选项必须为 1,2 和 3。如果他选择 'B',则显示的选项为 4、5 和 6。
用户可以通过按下最后的按钮来确认他的组合 (A-1,...)。
一个小例子就是我的意思。
提前致谢!
所以这是我建议的代码:
from tkinter import Tk, Button, Frame, StringVar
from tkinter.ttk import Combobox
options = {'A': [1, 2, 3], 'B': [4, 5, 6]}
def get_var_1(event):
value = cb1_var.get()
cb2_var.set(options[value][0])
cb2.config(values=options[value])
def get_info():
print(cb1_var.get(), cb2_var.get())
root = Tk()
cb_frame = Frame(root)
cb_frame.pack(side='left')
cb1_values = list(options.keys())
cb1_var = StringVar()
cb1_var.set(cb1_values[0])
cb1 = Combobox(cb_frame, values=list(options.keys()), textvariable=cb1_var)
cb1.pack(side='top')
cb1.bind('<<ComboboxSelected>>', get_var_1)
cb2_var = StringVar()
cb2_var.set(options[cb1_values[0]][0])
cb2 = Combobox(cb_frame, values=options[cb1_values[0]], textvariable=cb2_var)
cb2.pack(side='bottom')
btn_frame = Frame(root)
btn_frame.pack(side='right')
Button(btn_frame, text='Confirm', command=get_info).pack()
root.mainloop()
基本上应该能看懂,有问题再问
假设我得到了以下字典:
dict = {'A': [1,2,3], 'B': [4,5,6]}
有了这个字典和两个组合框,用户可能会得到一个特定的组合,例如A-1.问题是像A-5或B-1这样的选项不应该可以选择。
于是想到了下面的实现方式。如果用户在第一个框中选择 'A',则第二个框中的选项必须为 1,2 和 3。如果他选择 'B',则显示的选项为 4、5 和 6。 用户可以通过按下最后的按钮来确认他的组合 (A-1,...)。
一个小例子就是我的意思。
提前致谢!
所以这是我建议的代码:
from tkinter import Tk, Button, Frame, StringVar
from tkinter.ttk import Combobox
options = {'A': [1, 2, 3], 'B': [4, 5, 6]}
def get_var_1(event):
value = cb1_var.get()
cb2_var.set(options[value][0])
cb2.config(values=options[value])
def get_info():
print(cb1_var.get(), cb2_var.get())
root = Tk()
cb_frame = Frame(root)
cb_frame.pack(side='left')
cb1_values = list(options.keys())
cb1_var = StringVar()
cb1_var.set(cb1_values[0])
cb1 = Combobox(cb_frame, values=list(options.keys()), textvariable=cb1_var)
cb1.pack(side='top')
cb1.bind('<<ComboboxSelected>>', get_var_1)
cb2_var = StringVar()
cb2_var.set(options[cb1_values[0]][0])
cb2 = Combobox(cb_frame, values=options[cb1_values[0]], textvariable=cb2_var)
cb2.pack(side='bottom')
btn_frame = Frame(root)
btn_frame.pack(side='right')
Button(btn_frame, text='Confirm', command=get_info).pack()
root.mainloop()
基本上应该能看懂,有问题再问