python - 下拉列表依赖于另一个下拉 tkinter
问题描述
我有一个包含汽车品牌的列表,另一个包含这些品牌的型号名称的列表。我想要两个下拉列表。首先选择品牌,然后在第二个下拉列表中选择型号。但只是所选品牌的型号。我得到了以下代码。
import tkinter as tk
brands = ["Bugatti","VW","Opel","Porsche"]
models = [["Veyron","Chiron"],
["Golf","Passat","Polo","Caddy"],
["Insignia","Corsa","Astra"],
["Taycan","Cayenne","911"]]
root = tk.Tk()
canvas = tk.Canvas(root, height=500, width= 500, bg="white")
canvas.pack()
tkvar = tk.StringVar(root)
tkvar.set('Choose')
popupMenu1 = OptionMenu(canvas, tkvar, *brands)
popupMenu1.pack()
def change_dropdown(*args):
print("Chosen brand " + tkvar.get())
for i in range(len(brands)):
if tkvar.get() == brands[i]:
print(models[i])
tkvar.trace('w', change_dropdown)
root.mainloop()
我现在如何使用列表模型中的信息创建第二个下拉列表。谢谢你的帮助。
解决方案
您可以使用 Combobox 制作依赖下拉列表
import tkinter
from tkinter import ttk
root = tkinter.Tk()
'''
widgets are added here
'''
brands = ["Bugatti","VW","Opel","Porsche"]
models = [["Veyron","Chiron"],
["Golf","Passat","Polo","Caddy"],
["Insignia","Corsa","Astra"],
["Taycan","Cayenne","911"]]
car_brand = ttk.Combobox(root, width=37, value=(brands))
car_brand.grid(row=3, column=1, columnspan=2, padx=10, pady=2, sticky='w')
def callback(eventObject):
abc = eventObject.widget.get()
car = car_brand.get()
index=brands.index(car)
car_model.config(values=models[index])
car_model = ttk.Combobox(root, width=37)
car_model.grid(row=4, column=1, columnspan=2, padx=10, pady=2, sticky='w')
car_model.bind('<Button-1>', callback)
root.mainloop()
推荐阅读
- ajax - 内部服务器错误 500 ajax 是什么问题
- taskmanager - 实例已在运行(Windows 任务)
- asp.net - 角度问题 - 无法获取 /
- python - 使用flask babel相应地设置html标签语言属性
- java - org.springframework.beans.factory.BeanCreationException:创建 ServletContext 资源中定义的名称为“entityManagerFactory”的 bean 时出错
- angular - 增加z-index的角小吃店不起作用?
- android - Android 8.0 - Google API 26 升级失败
- f# - 为什么我不能使用显式类型管道函数
- python - 使用另一个多索引系列屏蔽数据框
- excel - 将列值展平为逗号分隔列表