Почему мои кнопки изображения не отображаются?

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

Я пытался использовать place и pack , оба не работали. В чем может быть проблема?

 from tkinter import* import tkinter as tk import settings class Application(Frame): def __init__ (self, master): Frame.__init__(self,master) self.grid() self.create_widgets() def create_widgets(self): button1 = PhotoImage(file ="button1.gif") button2 = PhotoImage(file ="button2.gif") settings_button = Button(self, image = button1, command = self.mult_command, width = 15) settings_button.place(x=1, y=1) rules_button = Button(self, image = button2, command = self.the_rules, width = 15) rules_button.place(x=50, y=50) def main_code(): window = Tk() window.title("The Bouncer") bg_image = PhotoImage(file ="pic.gif") x = Label (image = bg_image) x.image = bg_image x.place(x = 0, y = 0, relwidth=1, relheight=1) window.geometry("600x300") app = Application(window) window.mainloop() main_code() 

благодаря

  • Как установить цвет границы некоторых виджетов Tkinter?
  • Python Tkinter: обновить изображение в холсте
  • Наследование с кадра или нет в приложении Tkinter
  • Почему люди говорят: «Не используйте .place ()»?
  • У tkinter есть виджет таблицы?
  • Python, Tkinter: если есть возможность установить флажки по умолчанию?
  • Как я могу изменить текст кнопки, от текста до пустого имени с задержкой?
  • Запуск цикла вместе с приложением Tkinter
  • 2 Solutions collect form web for “Почему мои кнопки изображения не отображаются?”

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

     button1 = PhotoImage(file ="button1.gif") button2 = PhotoImage(file ="button2.gif") 

    в

     self.button1 = PhotoImage(file ="button1.gif") self.button2 = PhotoImage(file ="button2.gif") 

    и использовать

     settings_button = Button(self, image = self.button1, command = self.mult_command, width = 15) 

    и т.п.

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

    Помимо сохранения ссылки на изображение, у вас есть проблема с этой строкой:

     self.grid() 

    в методе Application __init__ . Это превращает рамку в окно, но поскольку ничто никогда не упаковывается или не зацикливается в рамке, оно никогда не расширяется мимо маленькой крошечной рамки, поэтому вы просто не видите Кнопки внутри нее. Простым исправить здесь будет метод pack , с аргументами для fill окна и expand при необходимости:

     self.pack(fill=BOTH, expand=1) 
    Python - лучший язык программирования в мире.