如何在Python Tk Frame中显示和更改图标
我有一个用Python Tkinter做的框架,这个框架里显示了几个字段。我还想加一个红色/黄色/绿色的图标,用来显示一个外部设备的状态。
这个图标是从一个叫做ICON_LED_RED.ico的文件中加载的。
- 我该怎么在我的框架里显示这个图标呢?
- 我该怎么在运行时更改这个图标?比如把BitmapImage('RED.ico')换成BitmapImage('GREEN.ico')。
这里有一些代码,但它是不工作的:
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()
def createWidgets(self):
# ...other frame code.. works just fine.
self.OKBTN = Button(self)
self.OKBTN["text"] = "OK"
self.OKBTN["fg"] = "red"
self.OKBTN["command"] = self.ok_btn_func
self.OKBTN.pack({"side": "left"})
# when I add the following the frame window is not visible
# The process is locked up such that I have to do a kill -9
self.statusFrame = Frame(self, bd=2, relief=RIDGE)
Label(self.statusFrame, text='Status:').pack(side=LEFT, padx=5)
self.statIcon = BitmapImage('data/ICON_LED_RED.ico')
Label (self.statusFrame, image=self.statIcon ).grid()
self.statusFrame.pack(expand=1, fill=X, pady=10, padx=5)
2 个回答
0
我用下面的代码在tkinter中显示一个图标
class dialog(Tk):
def __init__(self):
Tk.__init__(self)
self.wm_iconbitmap('images/Icon.ico')
1
问题在于你在同一个容器里同时使用了网格布局和打包布局。这种情况常常会导致图形界面卡住。原因是,网格管理器会调整所有东西的大小以适应,然后打包管理器又看到变化,重新调整大小。接着,网格管理器又看到变化,再次调整大小,反复循环。
你在使用打包布局的时候,给包含“状态:”文本的标签用了打包,而给带有图片的标签用了网格布局。