2017-10-26 1 views
2

mit Python 3.6.1 und das mitgelieferte tkinter ModulAls ich grid_slaves() auf Reihen mit Widgets laufen gibt es eine leere Menge

Ich versuche, eine Liste von 10 Karten zu haben tkinter anzuzeigen und ihre jeweiligen Erweiterungen ... Ich kann es einmal funktionieren lassen, aber ich kann es nicht mit dem Knopf wiederholbar machen.

Ich möchte den ersten Satz entfernen und dem Benutzer erlauben, es erneut auszuführen. Also muss ich die Widgets identifizieren und entfernen. Ich habe this answer verwendet, als ich versuchte herauszufinden, wie man die Label-Widgets in einer bestimmten Zeile identifiziert. Aber wenn ich es ausführe, werden die Widgets in den Zeilen nicht übernommen. Es gibt nur leere Sätze für jede Zeile zurück.

Diese erste Schleife ist, wo ich die Etiketten aus der Hauptklasse app(Frame) __init__() Methode und auch die Methode, die Dinge abholen sollte, um sie auszuräumen eingerichtet. Ich habe es weiter unterteilt, als es an diesem Punkt versucht werden muss, um Fehler zu beheben. Ich denke, es ist ein Problem mit dem Umfang, ich kenne einfach nicht genug Python, um bei meiner Suche ohne einen Rat weiter zu kommen.

from tkinter import * 

class App(Frame): 
    def __init__(self): 
     super().__init__() 
     row = 2 
     for item in range(0, 9): 
      self.label1 = Label(text="item") 
      self.label1.grid(row=row, column=0, sticky=W) 
      self.label2 = Label(text="item") 
      self.label2.grid(row=row, column=2, sticky=E) 
      row += 1 

     button = Button(text="Do the thing!", command=self.replace_labels()) 
     button.grid(row=0, column=1) 

    def replace_labels(self): 
     row = 2 
     for number in range(0, 9): 
      temp_set = self.grid_slaves(row=number + row) 
      row += 1 
     for thing in temp_set: 
      thing.forget() 

def main(): 
    root = Tk() 
    app = App() 
    root.mainloop() 

if __name__ == '__main__': 
    main() 
+0

bitte ein [MCVE] mit korrektem Einzug erstellen. Dieses Beispiel wird nicht wie es ist ausgeführt. –

Antwort

0

Ich kann nicht Ihren Code ausführen, aber es scheint, dass Sie Widgets im Root-Fenster erstellen, noch versucht, eine Liste der Fenster in der app Objekt zu erhalten.

Wenn Sie die Etikett wollen Teil von app zu sein, müssen Sie angeben, dass, wenn Sie die Etiketten erstellen:

... 
self.label1 = Label(self, ...) 
self.label2 = Label(self, ...) 
... 
+0

Vielen Dank für das Betrachten. Ich reduzierte den Code und reichte ihn erneut mit dem gleichen Problem ein ... auch dafür verantwortlich. Leider dasselbe Problem. –

+0

@StephenDeVilbiss: Der Code, den ich in diesem Moment sehe, erstellt immer noch die Labels im Root-Fenster, aber Sie rufen immer noch 'grid_slaves' im' app'-Frame auf. –

+0

Es tut mir leid, ich muss etwas vermissen ... Ich erstelle die Etiketten mit 'self.label1 = Label (text =" item ")' bezieht sich das auf das root-Fenster? Ich habe das Gefühl, dass ich etwas Grundlegendes über Klassen nicht verstehe, wenn das der Fall ist. UPDATE: Vergiss es. Ich habe gerade herausgefunden, was du meinst, haha. Vielen Dank! –

Verwandte Themen