Как отобразить и изменить значок внутри python Tk Frame - PullRequest
0 голосов
/ 19 марта 2011

У меня есть Python Tkinter Frame, который отображает несколько полей.Я также хочу добавить красный / желтый / зеленый значок, который будет отображать состояние внешнего устройства.
Значок загружается из файла с именем ICON_LED_RED.ico.

  1. Как отобразить значок в рамке?
  2. Как изменить значок во время выполнения?Например, замените 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 голосов
/ 19 марта 2011

Проблема в том, что вы смешиваете сетку и пакуете в один контейнер. Это довольно часто является причиной зависания графического интерфейса. Проблема в том, что менеджер сетки изменяет размер всего, чтобы соответствовать, тогда менеджер пакета видит изменение и изменяет размеры, чтобы соответствовать. Менеджер сетки видит изменения и изменяет размеры, чтобы соответствовать, и ...

Вы используете пакет с меткой, содержащей текст «Status:», но сетку с меткой, на которой есть изображение.

0 голосов
/ 19 марта 2011

Я использую следующий код для отображения значка в tkinter

class dialog(Tk):
     def __init__(self):
        Tk.__init__(self)
        self.wm_iconbitmap('images/Icon.ico')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...