该代码应该:
该代码未考虑用户的输入错误,即,假设entry1小部件中的值是合法的myDict键。
import tkinter as tk
from tkinter import ttk
window = tk.Tk()
window.geometry('300x300')
window.title('test')
def showResult():
x = var.get()
message = list(my_Dict[x].values())
result.set(str(message))
my_Dict= {'A': {'aa': 1}, 'B': {'bb': 2}, 'C': {'cc': 3}}
label = ttk.Label(window, text='Enter here').grid(row=0, column=0)
var = tk.StringVar()
entry1 = ttk.Entry(window, textvariable=var).grid(row=0, column=1)
label = ttk.Label(window, text='"Result here').grid(row=2, column=0)
result = tk.StringVar()
entry2 = ttk.Entry(window, textvariable=result).grid(row=2, column=1)
btn = ttk.Button(window, text='SHOW', command=showResult())
btn.grid(row=1, column=0)
window.mainloop()
这个想法是,当用户在条目1中输入“ A”并按下按钮时, “'aa':1” 将出现在entry2小部件中。
相反,我得到这个:
File "...../test.py", line 10, in showResult
message = list(my_Dict[x].values())
KeyError: ''
同一脚本在Tkinter外部也可以正常工作,因此它必须与GUI有关。 也许PyCharm知道当时entry1为空,因此var =''(my_Dict中没有''键)} IDK ...
谢谢您的帮助!
答案 0 :(得分:0)
4,3,2
问题出在showResult()过程和'btn'对象的声明中。 创建btn时,将调用连接的插槽,但此时var对象是一个空字符串。消息对象删除时,showResult()中会出现提示KeyError异常。
改为使用lambda表达式或重构showResult(),如下所示:
import tkinter as tk
from tkinter import ttk
window = tk.Tk()
window.geometry('300x300')
window.title('test')
def showResult():
x = var.get()
message = list(my_Dict[x].values())
result.set(str(message))
my_Dict= {'A': {'aa': 1}, 'B': {'bb': 2}, 'C': {'cc': 3}}
label = ttk.Label(window, text='Enter here').grid(row=0, column=0)
var = tk.StringVar()
entry1 = ttk.Entry(window, textvariable=var).grid(row=0, column=1)
label = ttk.Label(window, text='"Result here').grid(row=2, column=0)
result = tk.StringVar()
entry2 = ttk.Entry(window, textvariable=result).grid(row=2, column=1)
btn = ttk.Button(window, text='SHOW', command=lambda: showResult())
btn.grid(row=1, column=0)
window.mainloop()