Estoy tratando de crear Botones en Python con las clases, pero cuando se ejecuta es que los botones no aparecen. La siguiente es mi código

#Button_2
#Using Classes

from Tkinter import * 

class Application(Frame):
    """A GUI application with three button"""

    def _init_(self, master):
        """ Initialise the Frame. """
        Frame._init_(self, master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        #"""Create three buttons"""
        #Create first buttom
        self.btn1 = Button(self, text = "I do nothing")
        self.btn1.grid()

        #Create second button
        self.btn2 = Button(self)
        self.btn2.grid()
        self.btn2.configure(text = "T do nothing as well")

        #Create third button
        self.btn3 = Button(self)
        self.btn3.grid()    
        self.btn3.configure(text = "I do nothing as well as well")

    root = Tk()
    root.title("Lazy Button 2")
    root.geometry("500x500")
    app = Application(root)

    root.mainloop()

Cualquier ayuda se agradece

  • para agregar a mgilson la respuesta, la sangría es inexistente.
  • Yo sangría en el código para usted de modo que se hace correctamente en TAN. Parte del problema con el renderizado es que parece que había tabulaciones y espacios. (Les convierte a todos a 4 espacios por nivel como se especifica en el PEP8). Esperemos que se acaba de publicar el código, pero si no, por Favor, no mezclar las fichas y los espacios en el código y utilice preferiblemente de 4 espacios por nivel de sangría como he hecho anteriormente.
InformationsquelleAutor user1581917 | 2012-10-25

2 Comentarios

  1. 2

    OK, el primer problema es que han declarado su siguiente código:

    root = Tk()
    root.title("Lazy Button 2")
    root.geometry("500x500")
    app = Application(root)
    
    root.mainloop()code here

    dentro de la misma clase. Debería estar fuera, por lo que este una sangría problema (tal vez stackoverflow problema con las sangrías?).

    en segundo lugar, he simplificado el código para que se ejecute

    from Tkinter import * 
    
    class Application(Frame):
          """A GUI application with three button"""
    
         #create a class variable from the root (master):called by the constructor
         def _init_(self, master):
              self.master = master
    
         #simple button construction
         # create a button with chosen arguments
         # pack it after the creation not in the middle or before
    
         def create_widgets(self):
              #"""Create three buttons"""
              #Create first button
              btn1 = Button(self.master, text = "I do nothing")
              btn1.pack()
    
              #Create second button
              btn2 = Button(self.master, text = "T do nothing as well")
              btn2.pack()
    
             #Create third button
             btn3=Button(self.master, text = "I do nothing as well as well")
             btn3.pack()
    
      #must be outside class definition but probably due to stackoverlow
      root = Tk()
      root.title("Lazy Button 2")
      root.geometry("500x500")
      app = Application(root)
      #call the method
      app.create_widgets()
      root.mainloop()

    Este es un punto de partida y definitivamente funciona como se ha demostrado a continuación:

    Creación de botones con Python GUI

    Puede probablty voluntaria alrededor con la cuadrícula() en lugar de pack y llamar al método de la def init constructor. Espero que ayude.

    Este llamado método también funciona:

    root = Tk()
    root.title("Lazy Button 2")
    root.geometry("500x500")
    app = Application(root).create_widgets()  #creates and invokes
    root.mainloop()

    Mi última prueba también funciona:

    def __init__(self,master):
        self.master = master
        self.create_widgets()

    seguido por:

    root = Tk()
    root.title("Lazy Button 2")
    root.geometry("500x500")
    app = Application(root)
    root.mainloop()

    Creación de botones con Python GUI

    El código final:

    from Tkinter import * 
    
    class Application(Frame):
    """A GUI application with three button"""
    
    def __init__(self,master):
        self.master = master
        self.create_widgets()
    
    
    
    def create_widgets(self):
        #"""Create three buttons"""
        #Create first buttom
        btn1 = Button(self.master, text = "I do nothing")
        btn1.pack()
    
        #Create second button
        btn2 = Button(self.master, text = "T do nothing as well")
        btn2.pack()
    
        #Create third button
        btn3=Button(self.master, text = "I do nothing as well as well")
        btn3.pack()
    
    root = Tk()
    root.title("Lazy Button 2")
    root.geometry("500x500")
    app = Application(root)
    root.mainloop()

    Creación de botones con Python GUI

  2. 5

    Necesita su «constructor» método para ser nombrado __init__, no _init_. Como está escrito, su grid y create_widgets métodos nunca te llama desde _init_ nunca se llama.

Dejar respuesta

Please enter your comment!
Please enter your name here