下拉列表依赖于另一个下拉列表

2024-09-27 23:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个汽车品牌的清单,第二个是这些品牌的车型名称。我想要两个下拉列表。首先选择品牌,然后在第二个下拉列表中选择型号。但只是从选定品牌的模型。我得到了以下代码。你知道吗

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()

我现在如何用列表模型中的信息创建第二个下拉列表。谢谢你的帮助。你知道吗


Tags: 模型列表getmodelsrootchangepacktk
2条回答

您可以使用组合框来创建相关下拉列表

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()
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')

tkvar2 = tk.StringVar(root)
tkvar2.set('Model')

popupMenu1 = tk.OptionMenu(canvas, tkvar, *brands)
popupMenu1.pack()


popupMenu2 = tk.OptionMenu(canvas, tkvar2, [])
popupMenu2.pack()

def change_dropdown(*args):

    print("Chosen brand " + tkvar.get())
    for i in range(len(brands)):
        if tkvar.get() == brands[i]:
            popupMenu2["menu"].delete(0, "end")
            for item in models[i]:
                   popupMenu2['menu'].add_command(label=item, command=tk._setit(tkvar2, item))


tkvar.trace('w', change_dropdown)
root.mainloop()

相关问题 更多 >

    热门问题