我试图根据输入到tinter输入字段中的键显示不同的图像。我从我的函数返回None,搜索保存为搜索词的关键字典,并将值作为图像的名称。我不知道如何纠正我的错误。我的最终目标是创建一个“说明性”字典的tinter GUI,感谢任何帮助或评论 “”” 示例如何在字段中放置文本和图像 “”” 来自tkinter import *
def choose_image():
library = {'anchor':'admiral.gif', 'hello':'hello_tkinter_cartoon.gif'}
term = e.get()
for desc, image in library.items():
if term == desc:
piccie = image
return desc, piccie
main = Tk()
# enter search key
e = StringVar()
term_entry = Entry( textvariable = e, bd = 2, width = 15, bg = 'mint cream', fg = 'sea green')
term_entry.grid(row =1, column =0, sticky = SE, pady = 15)
butn = Button(text = "Enter",)
butn.grid(column = 1, row = 1, sticky = W)
piccie = choose_image()
print(piccie)
piccie = PhotoImage(file=piccie)
desc = choose_image()
# two results fields adjacent
w1 = Label(main, image =piccie).grid(column = 1, row =0)
w2 = Label(main,
text = desc,
justify=LEFT,
padx = 10).grid(row = 0, column = 0)
if __name__ == '__main__':
main.mainloop()
答案 0 :(得分:1)
它返回None
,因为这是Python中任何函数返回的默认返回值。
第一次拨打choose_image()
时,e.get()
会返回空字符串,因此代码如下:
piccie = image
return desc, piccie
不会被执行,因为term == desc
不会是真的。
您可以通过在e.get()
返回空字符串时返回默认值的值来解决此问题:
library = {'anchor':'admiral.gif', 'hello':'hello.gif'}
term = e.get()
if term == "":
return "anchor", "admiral.gif"
请注意,在同一个函数中,piccie
变量是if
块的局部变量,而不是全局变量引用PhotoImage
对象。另一方面,您将返回一个包含图片路径的元组,该元组应足以设置PhotoImage
对象。
你的第二个问题是你正在为你的file
对象的属性PhotoImage
分配一个最终的字符串元组,但它只需要一个表示图片路径的字符串:
piccie = choose_image()
piccie = PhotoImage(file=piccie[1])
请注意,我正在为file
属性分配元组的第二个元素。
我不明白为什么你第二次打电话choose_image()
,你不需要这样做。
以下是完整代码并进行了一些更改。如果你不明白,请问。
from tkinter import *
def choose_image(photo_image, text_lab, image_lab):
library = {'anchor':'admiral.gif', 'hello': 'hello.gif'}
term = e.get()
if term == "":
photo_image.config(file="admiral.gif")
text_lab.config(text="anchor")
image_lab.config(image=photo_image)
else:
for desc, image in library.items():
if term == desc:
photo_image.config(file=image)
text_lab.config(text=desc)
image_lab.config(image=photo_image)
main = Tk()
e = StringVar()
term_entry = Entry(textvariable=e, bd=2, width = 15, bg='mint cream', fg='sea green')
term_entry.grid(row=1, column=0, sticky=SE, pady=15)
label_text = Label(main)
label_text.grid(column=1, row=0)
label_image = Label(main, justify=LEFT, padx=10)
label_image.grid(row=0, column=0)
photo_image = PhotoImage(file="admiral.gif")
choose_image(photo_image, label_text, label_image)
butn = Button(text="Enter", command=lambda: choose_image(photo_image, label_text, label_image))
butn.grid(column=1, row=1, sticky=W)
main.mainloop()
还查看本文:
http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm
答案 1 :(得分:0)
在用户有机会输入任何内容之前,您的代码正在调用choose_image()
。您需要等待调用该功能,直到用户输入内容并按下回车键,或单击按钮或类似的东西。