【问题标题】:KeyError: <tkinter.Button object .!button>KeyError: <tkinter.Button object .!button>
【发布时间】:2018-04-19 13:49:01
【问题描述】:

尝试运行此代码时,我收到一个关键错误提示

KeyError: <tkinter.Button object .!button4>

所有按钮 1-5 的按钮编号都不同。

我不明白这意味着什么,因为我以为我指的是正确的按钮。请帮忙!这是我的代码:

import tkinter as tk

def button_click(event = None):
    which_button = event.widget
    var = f[which_button]

    if var in f:
        var.set(f[var])
    else:
        for i, j in enumerate(v):
            if j == v[i]:
                var.set(k[i])

window = tk.Tk()
window.title("Flashcards")
k=[]
v=[]

f={"Bonjour": "Hello",
   "Lundi": "Monday",
   "Parler": "To Talk",
   "Manger": "To Eat",
   "Dormir": "To Sleep"}

for key,val in f.items():
    k.append(key)
    v.append(val)

for i in range(5):
    s = tk.StringVar()
    s.set(k[i])

    b = tk.Button(window, textvariable = s, width = 10)
    b.bind("<Button-1>", button_click)
    b.grid(row = 0, column = i)

window.mainloop()

【问题讨论】:

  • 你做了什么来调试这个?你检查过which_button 是什么,f 是什么?显然,which_button 不是f 的成员。
  • 不,按钮是tk.Button 的实例。 "Bonjour""Lundi" 等是字符串,不是按钮。

标签: python button tkinter


【解决方案1】:

迟到的答案,但是:当 Button 具有回调函数时,为什么要使用绑定?使用partial(),您可以给每个按钮一个特定的回调。

import tkinter as tk
from functools import partial

def button_click(event=None, key=None):
    print(key, '-', f[key])

window = tk.Tk()
window.title("Flashcards")

f={"Bonjour":"Hello","Lundi":"Monday","Parler":"To Talk",
   "Manger":"To Eat","Dormir":"To Sleep"}
for i,key in enumerate(f.keys()):
    b = tk.Button(window, text=key, width = 10)
    b.bind("<Button-1>", partial(button_click, key=key))
    b.grid(row = 0, column = i)

window.mainloop()

如果您不熟悉partial,它类似于lambda:,但语法不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 2012-01-10
    • 2014-07-05
    • 2021-01-08
    • 1970-01-01
    • 2014-08-21
    • 2021-08-04
    • 2018-05-09
    相关资源
    最近更新 更多