2016-11-06 11 views
0

Ich arbeite gerade an einer Anwendung und habe einige Schwierigkeiten mit etwas. Ich möchte den Schlüssel aus dem Wörterbuch als Beschriftung haben und die vier Zahlen in der Liste sind der Wert für die entsprechende Taste und zeigen in die Tasten. Wenn ich eine Taste drücke, möchte ich die Beschriftung und die Schaltfläche so ändern, dass sie zum nächsten Element im Wörterbuch geht und den Prozess so lange wiederholt, bis keine weiteren Elemente im Wörterbuch vorhanden sind.dynamisch aktualisieren Text auf Schaltflächen in tkinter

Hier ist mein Code so weit:

import tkinter as tk 
q_a = {"label":[1,2,3,4],"label 2":[5,6,7,8]} 
class ExampleApp(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     self.label = tk.Label(self) 
     self.label.pack() 
     self.remaining = len(q_a) 
     self.countdown(self.remaining-1) 

    def loop(self, remaining=None): 
     if self.remaining <= 0: 
      self.label.configure(text="The end") 
     else: 
      self.label.configure(text=(list(q_a.keys())[self.remaining-1])) 
      dictionary_index = list(q_a.keys())[self.remaining-1] 
      self.remaining = self.remaining - 1 
      button1 = tk.Button(self, text=q_a[dictionary_index][0], 
          command=lambda: self.loop).pack() 
      button2 = tk.Button(self, text=q_a[dictionary_index][1], 
          command=lambda: self.loop).pack() 
      button3 = tk.Button(self, text=q_a[dictionary_index][2], 
          command=lambda: self.loop).pack() 
      button4 = tk.Button(self, text=q_a[dictionary_index][3], 
          command=lambda: self.loop).pack() 


if __name__ == "__main__": 
    app = ExampleApp() 
    app.mainloop() 
+0

Halten Daten als Liste zu halten, verwenden können. Erstellen Sie ein leeres Label und Schaltflächen und fügen Sie eine Funktion hinzu, die den Text auf dem Label und den Buttons ersetzt, indem Sie die Variable verwenden, die den letzten Index auf dieser Liste speichert. – furas

+0

do not 'button = Button(). Pack()' weil 'pack()' '' None 'zurückgibt und Sie' None' in 'button' erhalten – furas

+0

Wie würden Sie den Text auf der Schaltfläche und Label ändern? –

Antwort

0

Zuerst habe ich leeres Label und Schaltflächen erstellen und ich später loop nur Text auf dem Etikett und Tasten ändern.

Ich benutze Liste anstelle von Wörterbuch und self.current, um zu steuern, welche Daten aus der Liste ich als Text verwenden muss.

import tkinter as tk 

q_a = [ 
    ["label 1", [1,2,3,4]], 
    ["label 2", [5,6,7,8]], 
]  

class ExampleApp(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 

     self.label = tk.Label(self) 
     self.label.pack() 

     self.button1 = tk.Button(self, command=self.loop) 
     self.button1.pack() 

     self.button2 = tk.Button(self, command=self.loop) 
     self.button2.pack() 

     self.button3 = tk.Button(self, command=self.loop) 
     self.button3.pack() 

     self.button4 = tk.Button(self, command=self.loop) 
     self.button4.pack() 

     self.last = len(q_a) 
     self.current = -1 

     # set first text 
     # because `self.current = -1` then it use `self.current = 0` 
     self.loop() 

    def loop(self): 

     # get next element from list 
     self.current += 1 

     if self.current == self.last: 
      self.label.configure(text="The end") 
      # hide buttons 
      self.button1.forget() 
      self.button2.forget() 
      self.button3.forget() 
      self.button4.forget() 
     else: 
      self.label['text'] = q_a[self.current][0] 
      self.button1['text'] = q_a[self.current][1][0] 
      self.button2['text'] = q_a[self.current][1][1] 
      self.button3['text'] = q_a[self.current][1][2] 
      self.button4['text'] = q_a[self.current][1][3] 


if __name__ == "__main__": 
    app = ExampleApp() 
    app.mainloop() 

BTW: schließlich können Sie Schaltflächen als Liste halten button[0], etc, und verwenden for Schleife Text auf alle Tasten zu ändern oder alle Tasten verbergen.


BTW: Um besser lesbar machen Sie die Liste mit dictionares

q_a = [ 
    {"q": "label 1", "a": [1,2,3,4]}, 
    {"q": "label 2", "a": [5,6,7,8]}, 
] 

und

else: 
     self.label['text'] = q_a[self.current]["q"] 
     self.button1['text'] = q_a[self.current]["a"][0] 
     self.button2['text'] = q_a[self.current]["a"][1] 
     self.button3['text'] = q_a[self.current]["a"][2] 
     self.button4['text'] = q_a[self.current]["a"][3] 

oder sogar

else: 
     row = q_a[self.current] 

     self.label['text'] = row["q"] 
     self.button1['text'] = row["a"][0] 
     self.button2['text'] = row["a"][1] 
     self.button3['text'] = row["a"][2] 
     self.button4['text'] = row["a"][3] 
+0

Vielen Dank Furas! Gott segne dich! –

+0

@JohnCarterMitchel Ich füge Beispiel mit Liste der Wörterbücher hinzu. – furas

Verwandte Themen