Python 动态更改图像标签会导致整个窗口增长

Python 动态更改图像标签会导致整个窗口增长,python,tkinter,Python,Tkinter,我试图让我的UI(通常做其他事情,这是基本版本)从web资源更新图像标签。按下按钮时,整个窗口将增长,而不是替换图像。我以为我的打包电话会解决这个问题,但显然不是 谢谢你的意见 from Tkinter import * import base64 import urllib2 BTNTEXT_NEW_COMIC = "New Comic" def get_random_xkcd(): COMIC_PREFIX = 'http://imgs.xkcd.com/comi

我试图让我的UI(通常做其他事情,这是基本版本)从web资源更新图像标签。按下按钮时,整个窗口将增长,而不是替换图像。我以为我的打包电话会解决这个问题,但显然不是

谢谢你的意见

from Tkinter import *
import base64
import urllib2    

BTNTEXT_NEW_COMIC = "New Comic"    

def get_random_xkcd():
    COMIC_PREFIX = 'http://imgs.xkcd.com/comics/'
    response = urllib2.urlopen('http://c.xkcd.com/random/comic/')
    html = response.read()
    if COMIC_PREFIX in html:
        index = html.find(COMIC_PREFIX)
        substring = html[index:]
        endquote = substring.find("\"")
        url = substring[:endquote]
        return url
    else:
        return    

class LoggerWindow:
    def __init__(self, master):
        global frame 
        frame = Frame(master)
        frame.pack()    

        self.newcomic_button = Button(frame, text=BTNTEXT_NEW_COMIC, command=self.new_xkcd)
        self.newcomic_button.pack(side=LEFT)    

        self.new_xkcd()    

    def new_xkcd(self):
        global frame
        url = get_random_xkcd()
        print url
        u = urllib2.urlopen(url)
        raw_data = u.read()
        u.close()
        b64_data = base64.encodestring(raw_data)
        self.xkcd_image = PhotoImage(data=b64_data)
        self.xkcd_label = Label(image=self.xkcd_image)
        self.xkcd_label.pack()    


root = Tk()
app = LoggerWindow(root)    

root.mainloop()

您应该能够调用
self.xkcd\u label.configure(image=self.xkcd\u image)
,而不是像您那样创建新映像。如果不起作用,请尝试调用
self.xkcd_label.pack_forget()
在重新打包之前删除标签。

您应该能够调用
self.xkcd_label.configure(image=self.xkcd_image)
,而不是像您那样创建新映像。如果不起作用,请尝试调用
self.xkcd_label.pack_forget()
在重新打包之前删除标签。

您应该能够调用
self.xkcd_label.configure(image=self.xkcd_image)
,而不是像您那样创建新映像。如果不起作用,请尝试调用
self.xkcd_label.pack_forget()
在重新打包之前删除标签。

您应该能够调用
self.xkcd_label.configure(image=self.xkcd_image)
,而不是像您那样创建新映像。如果这不起作用,请尝试调用
self.xkcd\u label.pack\u forget()
在重新打包之前移除标签。

答对了!配置是路由,我甚至没有尝试使用pack\u-forget。调用
pack\u-forget
只会将其从视图中删除。它仍在占用内存。说得好。我建议
pack\u forget
将其从窗口中删除,这将解决所描述的问题。我想
destroy()!配置是路由,我甚至没有尝试使用pack\u-forget。调用
pack\u-forget
只会将其从视图中删除。它仍在占用内存。说得好。我建议
pack\u forget
将其从窗口中删除,这将解决所描述的问题。我想
destroy()!配置是路由,我甚至没有尝试使用pack\u-forget。调用
pack\u-forget
只会将其从视图中删除。它仍在占用内存。说得好。我建议
pack\u forget
将其从窗口中删除,这将解决所描述的问题。我想
destroy()!配置是路由,我甚至没有尝试使用pack\u-forget。调用
pack\u-forget
只会将其从视图中删除。它仍在占用内存。说得好。我建议
pack\u forget
将其从窗口中删除,这将解决所描述的问题。我想
destroy()
将是从内存中删除它的最佳方法。