Tkinter Treeview с изображениями: Неверное название штата pyimage2 - PullRequest
0 голосов
/ 28 ноября 2018

Я пытался вставить изображения и значения в древовидную структуру, чтобы создать календарь с изображениями на определенные дни, но я столкнулся с ошибками.При инициализации моего календарного объекта я создаю идентификаторы элементов, которые необходимо вставить при создании календарных дат

    # store items ids, used for insertion later
    imgs= [ImageTk.PhotoImage(Image.open('sb.png')), ImageTk.PhotoImage(Image.open('sp.png')), ImageTk.PhotoImage(Image.open('sb3.png')) ]
    self._items = [self._calendar.insert('', 'end', values='', image= imgs) for _ in range(6)]

, затем у меня

self._calendar.item(item, values=dates)

.item ()происходит из древовидной структуры, и (item, ...) заменяет вставленные элементы сверху датами

Ошибка, которую я получаю с этим методом: _tkinter.TclError: Неверное имя состояния pyimage2 Этосамое близкое решение, которое я могу найти

Любая помощь будет принята с благодарностью, я не слишком знаком с TK как Python GUI

1 Ответ

0 голосов
/ 29 ноября 2018

Вопрос : _tkinter.TclError: Invalid state name pyimage2

  • Вам не нужно PIL, если вы используете *.png images

    imgs= [ImageTk.PhotoImage(Image.open('sb.png')), 
           ImageTk.PhotoImage(Image.open('sp.png')), 
           ImageTk.PhotoImage(Image.open('sb3.png')) ]
    
    • Изменить на

      Примечание :self.imgs необходимо для предотвращения сбора мусора!

      self.imgs = [tk.PhotoImage(file='share/sb.png'),
                   tk.PhotoImage(file='share/sp.png'),
                   tk.PhotoImage(file='share/sb3.png')
                  ]
      
  • Вы цикл range(6), без использования значения диапазона!
    Поэтому вы insert весь список изображений image=imgs в treeview!

    Примечание : Это является причиной _tkinter.TclError: Неверное имя состояния pyimage2

    self._items = 
      [self._calendar.insert('', 'end', values='', image= imgs) for _ in range(6)]
    
    • Изменить на

      self._calendar = ttk.Treeview(self)
      self._items = 
        [self._calendar.insert('', 'end', image=self.imgs[idx) for idx in range(3)]
      

Протестировано с Python: 3,5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...