如何在python Tk Frame中显示和更改图标

时间:2011-03-19 04:23:15

标签: python tkinter

我有一个显示多个字段的python Tkinter Frame。我想补充一下 红色/黄色/绿色图标,显示外部设备的状态 该图标从名为ICON_LED_RED.ico的文件加载。

  1. 如何在相框中显示图标?
  2. 如何在运行时更改图标?例如,用BitmapImage替换BitmapImage('RED.ico')('GREEN.ico')
  3. 以下是一些正在运行的代码:

    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 :(得分:0)

我使用以下代码在tkinter中显示一个图标

class dialog(Tk):
     def __init__(self):
        Tk.__init__(self)
        self.wm_iconbitmap('images/Icon.ico')

答案 1 :(得分:0)

问题是你在同一个容器中混合网格和包装。这通常是GUI冻结的原因。问题是,网格管理器调整所有内容以适应,然后包管理器看到更改并调整大小以适应。网格管理器会看到更改并调整大小以适应,并且......

您正在使用包含文字“状态:”的包,但网格带有包含图片的标签。