¿Por qué mis botones de imagen no aparecen?

Estoy tratando de colocar dos botones de imagen en el fondo de mi imagen en una posición determinada, pero mis botones no aparecen. Creo que sus imágenes están detrás del fondo.

Intenté usar place and pack , ambos no funcionaron. ¿Cual podría ser el problema?

 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() 

Gracias

Es probable que su imagen se recoja en la basura antes de que se muestre. Este es un Gotcha Tkinter común. Intenta cambiar las líneas:

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

a

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

y use

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

etc.

Esto debería mantener una referencia a su imagen, evitando que se recoja la basura.

Además de mantener una referencia a la imagen, tiene un problema con esta línea:

 self.grid() 

en el método de Application __init__ . Está incrustando el Marco en la ventana, pero como no hay nada empaquetado o reticulado en el marco, nunca se expande más allá de un pequeño y pequeño marco, así que simplemente no ve los Botones en su interior. Una solución simple aquí sería el método de pack , con argumentos para fill la ventana y expand cuando sea necesario:

 self.pack(fill=BOTH, expand=1)