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

时间:2015-03-24 00:09:59

标签: 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/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()

1 个答案:

答案 0 :(得分:3)

您应该可以拨打self.xkcd_label.configure(image=self.xkcd_image)而不是像您一样创建新图片。如果这不起作用,请尝试在重新包装之前调用self.xkcd_label.pack_forget()删除标签。