【问题标题】:get value from event in an entrybox从输入框中的事件中获取值
【发布时间】:2020-03-03 14:56:04
【问题描述】:

#我想把combobox中选中的item放到merk_entry中。以及从 model_entry 中的列表框(omschrijving)中选择的项目。 .get() 或 insert 在此函数中不起作用。 我尝试了他们两个。还选择了组合框。 我不知道如何解决这个问题。

提前致谢。

from tkinter import *
from tkinter.ttk import Combobox
window=Tk()
window.geometry("500x500")

wagenmerk=["BMW","Mercedes","Audi"]
Bmw=["Bmw 1 reeks","Bmw 5 reeks Berline","Bmw 7 reeks"]
Mercedes=["A-klasse","B-klasse","Eqc","C-klasse"]
Audi=["A1","A3","A4"]

def toon_info(evt):
    teller=1
    merk_info=automerk_entry.get()
    print(merk_info)
    if merk_info == "BMW":
        omschrijving.delete(0,END)
        for line in Bmw:
            omschrijving.insert(teller,Bmw[teller-1])
            teller+=1
    elif merk_info=="Mercedes":
        omschrijving.delete(0,END)
        for line in Mercedes:
            omschrijving.insert(teller,Mercedes[teller-1])
            teller+=1
    elif merk_info=="Audi":
        omschrijving.delete(0,END)
        for line in Audi:
            omschrijving.insert(teller,Audi[teller-1])
            teller+=1

automerk_text=Label(text="automerk")
merk_text=Label(text="merk")
model_text=Label(text="model")
prijs_text=Label(text="prijs")


automerk_text.place(x=15,y=70)
merk_text.place(x=280,y=100)
model_text.place(x=280,y=120)
prijs_text.place(x=280,y=140)

merk=StringVar()
model=StringVar()
prijs=StringVar()

merk_entry=Entry(textvariable=merk,width="25")
model_entry=Entry(textvariable=model,width="25")
prijs_entry=Entry(textvariable=prijs,width="25")

merk_entry.place(x=320,y=100)
model_entry.place(x=320,y=125)
prijs_entry.place(x=320,y=150)



automerk_entry=Combobox(window,values=wagenmerk,width=30)
automerk_entry.bind("<<ComboboxSelected>>",toon_info)
automerk_entry.place(x=70,y=70)

omschrijving=Listbox(window,width=30,height=10)
omschrijving.place(x=70,y=100)


#button
bereken=Button(window,text="toon",width="30",height="2",command=toon_info,bg="grey")
bereken.place(x=70,y=270)

【问题讨论】:

  • 在这种情况下“不工作”是什么意思?它会抛出错误吗?它会返回错误的信息吗?还有什么?
  • 您是否尝试过print(evt) 来查看事件数据的结构?

标签: python-3.x events tkinter listbox event-handling


【解决方案1】:

您尚未设置两个 Entry 小部件来接受值的更改。您的 Comboboxselected 按预期工作。执行以下更改以将Combobox 小部件和Listbox 小部件的选择反映到2 个Entry 小部件:

def toon_info(evt):
    teller=1
    merk_info=automerk_entry.get()
    merk.set(merk_info) # set the StringVar variable (assigned to the merk_entry widget)
    ...
    ...

绑定Listbox 小部件:

def set_item(evt):
    model.set(omschrijving.get(omschrijving.curselection()[0]))

omschrijving.bind('<<ListboxSelect>>', set_item)

最后,Button-bereken 未设置为发送或激活任何event/evt。所以回调函数(在选项command下)必须改变

【讨论】:

  • 几乎发布了一个非常相似的答案。我认为他还应该为列表框设置selectmode=SINGLE,因为第一个选定的项目将用于设置条目
  • model.set(omschrijving.get(omschrijving.curselection()[0])) IndexError:元组索引超出范围。这就是我现在得到的。
  • @newcoderror 尝试print cursorselection() 的内容。你就会明白问题所在
【解决方案2】:

这就是我修复它的方法。

def set_item(evt):
    model_entry.delete(0,END)
    cur_selection=omschrijving.curselection()
    if len(cur_selection)>0:
      model.set(omschrijving.get(cur_selection[0]))

【讨论】:

    猜你喜欢
    • 2012-10-27
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多