tkinter根据输入字段中输入的键显示图像

时间:2015-07-18 08:05:43

标签: python-3.x tkinter

我试图根据输入到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()

2 个答案:

答案 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()。您需要等待调用该功能,直到用户输入内容并按下回车键,或单击按钮或类似的东西。