从 Tkinter 中的列表框激活输入框

Activate Entry Box from Listbox in Tkinter

我正在尝试创建一个 GUI 来收集来自用户的三个输入,其中第一个输入有两个选项(基于列表框),如下图所示(其中选项“NACA”是 selected):

列表框有问题。我想这些选项相互重叠。例如,如果我 select NACA 选项(上图),然后我 select .txt 选项,则 NACA 标签的某些部分保留:

当然,只有标签出现,而不是要在里面输入的 entry_boxes(如果我删除列表框的部分,最后两个输入应用程序的 entry_boxes,所以我真的猜想问题出在列表框上)


import tkinter as tk


root = tk.Tk()
root.geometry('400x300') 
root.resizable(0, 0)



menu_inicial = tk.Canvas(root, width = 400, height = 300)
menu_inicial.pack()


def naca_box():
    naca_entry_box = tk.Entry(menu_inicial)
    menu_inicial.create_window(200, 30, window=naca_entry_box)
    naca_label = tk.Label(root, text="Enter NACA:")
    naca_label.pack()
    naca_label.place(x=50, y = 50)
    
def txt_box():
    txt_entry_box = tk.Entry(menu_inicial)
    menu_inicial.create_window(200, 30, window=txt_entry_box)
    txt_label = tk.Label(root, text="Enter .txt:")
    txt_label.pack()
    txt_label.place(x=50, y = 50)
    
    
def aoa_box():
    aoa_entry_box = tk.Entry(root)
    menu_inicial.create_window(200, 60, window=aoa_entry_box)
    aoa_label = tk.Label(root, text="Enter AoA (º):")
    aoa_label.pack()
    aoa_label.place(x=50, y = 80)
    
    
def panel_box():
    panel_entry_box = tk.Entry(root)
    menu_inicial.create_window(200, 90, window=panel_entry_box)
    panel_label = tk.Label(root, text="Enter Nº Panels:")
    panel_label.pack()
    panel_label.place(x=40, y = 110)


def update_box(*args):
    selection = box_list.curselection() 
    lb_value.set(options[selection[0]] ) 
    
    if selection[0] == 0:
        naca_box()
    else:
        txt_box()

options = ['NACA', '.txt']

listCon = tk.StringVar(value=options)
box_list = tk.Listbox(menu_inicial, listvariable=listCon, width=10, height=2, selectmode=tk.SINGLE)
box_list.grid(row=0, column=0)
box_list.bind('<<ListboxSelect>>', update_box)

lb_value=tk.StringVar()

aoa_box()
panel_box()


root.mainloop()



我该如何处理? “IF”语句选择选项有问题吗? (我不知道这样做是不是最好的...)

问题是每次点击按钮时, 你每次都在创建标签, 如果您想更改您创建的标签中的文本,请使用 'config()'

像这样更改您的代码,

sample_label=tk.Label(root)
sample_label.place(x=50, y = 50)

def naca_box():
    naca_entry_box = tk.Entry(menu_inicial)
    menu_inicial.create_window(200, 30, window=naca_entry_box)
    sample_label.config(text="Enter NACA:")

    
def txt_box():
    txt_entry_box = tk.Entry(menu_inicial)
    menu_inicial.create_window(200, 30, window=txt_entry_box)
    sample_label.config(text="Enter .txt:")