如何在def函数中使用tkinter从url发布图像

2024-09-29 23:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我问题的题目可能相当混乱,但我不知道该怎么说才好。在

基本上,当我把我的代码放在一个按钮命令的def中时,它不起作用,但是代码在def之外正常工作。在

这是不起作用的代码:

app = Tk()
app.geometry("1000x800")

def search():
    tx1get = tx1.get()
    Label(app, text="You Entered: \"" + tx1get + "\"").grid(row=1, column=0)
    fd = urllib.urlopen("http://ia.media-imdb.com/images/M/MV5BMTc2MTU4ODI5MF5BMl5BanBnXkFtZTcwODI2MzAyOA@@._V1_SY317_CR7,0,214,317_AL_.jpg")
    imgFile = io.BytesIO(fd.read())
    im = ImageTk.PhotoImage(Image.open(imgFile))
    image = Label(app, image = im, bg = "blue")
    image.grid(row=2, column=0)

tx1=StringVar()
tf = Entry(app, textvariable=tx1, width="100")
b1 = Button(app, text="Search", command=search, width="10")
tf.grid(row=0, column=0)
b1.grid(row=0, column=1)

app.mainloop()

但是,如果我删除def中的最后5条线并将它们放在def外部,则会起作用:

^{pr2}$

如有任何帮助或建议,我们将不胜感激!在


Tags: 代码textimageappsearchdefcolumnlabel
1条回答
网友
1楼 · 发布于 2024-09-29 23:32:11

您的代码无法工作,因为search中的im一旦search完成,就超出了范围。这样,ImageTk对象也会消失。要防止这种情况,请使im全局化(一种可能的解决方案):

import urllib 
from Tkinter import *
import io
from PIL import Image, ImageTk


app = Tk()
app.geometry("1000x800")

im = None  #<  im is global

def search():
    global im  #<  declar im as global, so that you can write to it
               # not needed if you only want to read from global variable.
    tx1get = tx1.get()
    Label(app, text="You Entered: \"" + tx1get + "\"").grid(row=1, column=0)
    fd = urllib.urlopen("http://ia.media-imdb.com/images/M/MV5BMTc2MTU4ODI5MF5BMl5BanBnXkFtZTcwODI2MzAyOA@@._V1_SY317_CR7,0,214,317_AL_.jpg")
    imgFile = io.BytesIO(fd.read())
    im = ImageTk.PhotoImage(Image.open(imgFile))
    image = Label(app, image = im, bg = "blue")
    image.grid(row=2, column=0)

tx1=StringVar()
tf = Entry(app, textvariable=tx1, width="100")
b1 = Button(app, text="Search", command=search, width="10")
tf.grid(row=0, column=0)
b1.grid(row=0, column=1)

app.mainloop()

相关问题 更多 >

    热门问题