Swap-Schnittstelle auf Taste drücken

Ich bin neu bei Tkinter und ich möchte eine Schaltfläche erstellen, die beim Drücken eine 2. Schnittstelle anzeigt. Ich habe folgendes Programm geschrieben:

import Tkinter root = Tkinter.Tk( ) root.title("My First Game") for r in range(3): for c in range(3): Tkinter.Label(root, text= '3', borderwidth=20 ).grid(row=1,column=1) Tkinter.Label(root, text= '6', borderwidth=20 ).grid(row=1,column=2) Tkinter.Label(root, text= '4', borderwidth=20 ).grid(row=1,column=3) Tkinter.Label(root, text= '2', borderwidth=20 ).grid(row=2,column=1) Tkinter.Label(root, text= '7', borderwidth=20 ).grid(row=2,column=2) Tkinter.Label(root, text= ' ', borderwidth=20 ).grid(row=2,column=3) Tkinter.Label(root, text= '5', borderwidth=20 ).grid(row=3,column=1) Tkinter.Label(root, text= '1', borderwidth=20 ).grid(row=3,column=2) Tkinter.Label(root, text= '8', borderwidth=20 ).grid(row=3,column=3) def mainprg(): for r in range(3): for c in range(3): Tkinter.Label(root, text= '3', borderwidth=20 ).grid(row=1,column=1) Tkinter.Label(root, text= '6', borderwidth=20 ).grid(row=1,column=2) Tkinter.Label(root, text= ' ', borderwidth=20 ).grid(row=1,column=3) Tkinter.Label(root, text= '2', borderwidth=20 ).grid(row=2,column=1) Tkinter.Label(root, text= '7', borderwidth=20 ).grid(row=2,column=2) Tkinter.Label(root, text= '4', borderwidth=20 ).grid(row=2,column=3) Tkinter.Label(root, text= '5', borderwidth=20 ).grid(row=3,column=1) Tkinter.Label(root, text= '1', borderwidth=20 ).grid(row=3,column=2) Tkinter.Label(root, text= '8', borderwidth=20 ).grid(row=3,column=3) B = Tkinter.Button(text = "Run", command = mainprg) B.pack() root.mainloop() 

Ich versuche, die erste Schnittstelle und die Run- Taste anzuzeigen. Nach Betätigen der Run- Taste wird die 2. Schnittstelle angezeigt. Aber nach dem Ausführen des obigen Codes gibt es nichts.

  • Wie man Argumente an einen Button-Befehl in Tkinter übergibt?
  • Python Tkinter eine Callback-Funktion für zwei Tasten
  • Kivy-Tasten-Bindungsfunktion mit Argument
  • Bestimmen Sie, welche Taste in Tkinter gedrückt wurde?
  • Kivy - Bearbeitungsetikett bei gedrückter Schaltfläche
  • Wie man auf id / widget der verschiedenen Klasse von einer Kivy-Datei (.kv) zugreifen kann?
  • 2 Solutions collect form web for “Swap-Schnittstelle auf Taste drücken”

    Sie mischen grid und pack (das ist eine schlechte Idee, siehe zB https://stackoverflow.com/a/3968033/3001761 ); Ändern Sie die Zuordnung von B zu:

     B = Tkinter.Button(text = "Run", command = mainprg) B.grid(row=4, column=1) 

    Auch deine for Schleifen tun das Gleiche 9 mal ohne ersichtlichen Grund; Du solltest wohl die Logik überdenken.

    Hier ist ein Beispiel, das einen Teil dessen macht, was du zu tun versuchst. Beachten Sie die Verwendung eines Verzeichnisses des Etiketts, das ersetzt werden muss. Wenn keine Verwendung von clean Methode durchgeführt wird, dann nur "überschreiben" die vorherige Bildschirm Aussehen und es kann zu gebrochenen Schnittstelle führen, wo ein Teil der Schaltfläche sichtbar teilweise von anderen Objekten wiederhergestellt werden.

     import Tkinter as Tki #constants - using this you can eventually change the interface's language by importing a different file containning these values. __title__ = "my first program" __run__ = "run!" #widgets contain all the currently created widgets, this will alow to destroy and replace them. global widgets widgets = [] #--------------------------------------------------------------------------------------------------- def clean(): for widget in widgets: widget.grid_remove() widget.destroy() #--------------------------------------------------------------------------------------------------- def createMainButton(master): clean() #it is required to specify the master, ie the container of each new widget as first parameter button = Tki.Button(root, text = __run__, command = lambda : mainProg(root)) button.grid(row=0, column=0) #have to provide a reference to the widget to allow clean destroy of it. widgets.append(button) #--------------------------------------------------------------------------------------------------- def mainProg(master): clean() #define a subclass def create (content, row, column): createLabel(master, content , 20, row , column) #create widgets create('3', 1, 1) create('6', 1, 2) create('4', 1, 3) create('2', 2, 1) create('7', 2, 2) create(' ', 2, 3) create('5', 3, 1) create('1', 3, 2) create('8', 3, 3) #--------------------------------------------------------------------------------------------------- def createLabel(master, content, borderSize, row, column): label = Tki.Label(master, text= content, borderwidth=borderSize ) label.grid(row=row,column=column) widgets.append(label) if __name__ == "__main__": root = Tki.Tk() root.title(__title__) createMainButton(root) root.mainloop() 

    Ich weiß nicht, was sind Ihre Kenntnisse über Object Programming, aber betrachten Sie einen anderen Weg, um Ihr Ziel zu erreichen: erweitern Sie die Tk-Klasse, um den Zugriff auf erforderliche Daten innerhalb eines bestimmten Bereichs ohne definieren globale Variablen (das heißt, im Allgemeinen, SCHLECHT!). Ich persönlich würde es so kommentieren:

     import Tkinter as Tki #constants - using this you can eventually change the interface's language by importing a different file containning these values. __title__ = "my first program" __run__ = "run!" class MyProgram(Tki.Tk): def __init__(self): Tki.Tk.__init__(self) self.widgets = [] self.CONSTANT_BORDERWIDTH = 20 self.title(__title__) self.createMainButton() def clean(self): for widget in self.widgets: widget.grid_remove() widget.destroy() def createMainButton(self): self.clean() #it is required to specify the master, ie the container of each new widget as first parameter button = Tki.Button(self, text = __run__, command = self.mainProg) button.grid(row=0, column=0) #have to provide a reference to the widget to allow clean destroy of it. self.widgets.append(button) def mainProg(self): self.clean() #create widgets self.createLabel('3', 1, 1) self.createLabel('6', 1, 2) self.createLabel('4', 1, 3) self.createLabel('2', 2, 1) self.createLabel('7', 2, 2) self.createLabel(' ', 2, 3) self.createLabel('5', 3, 1) self.createLabel('1', 3, 2) self.createLabel('8', 3, 3) def createLabel(self,content, row, column): label = Tki.Label(self, text= content, borderwidth=self.CONSTANT_BORDERWIDTH ) label.grid(row=row,column=column) self.widgets.append(label) if __name__ == "__main__": root = MyProgram() root.mainloop() 

    Wie auch immer, wenn dieser Code zu schwer zu verstehen ist, vergessen Sie die Programmierung für jetzt.

    Viel Glück! Arthur

    Python ist die beste Programmiersprache der Welt.