2016-10-10 4 views
-1

Wie es im Titel angegeben ist, habe ich N Strings (mal 3 sagen), und sie gehen einer nach dem anderen wie:Mehrere Ausgänge langsam zur gleichen Zeit gedruckt

"string1" 
"string2" 
"string3" 

Mit Hilfe von ‚Schlaf‘ Wir können die Zeichenfolge langsam, Symbol für Symbol, ausdrucken lassen, ABER ich möchte, dass sie langsam zur GLEICHEN ZEIT gedruckt werden. Ist es möglich, so etwas zu tun?

Problem - lvl.'Advanced ': Kann ich 3 tkinter knöpfe mit Text in ihnen gedruckt so machen? Oder ist es vielleicht besser, Etiketten mit einem solchen Texteffekt zu erstellen (wenn möglich) und sie sofort durch 3 Knöpfe mit denselben Wörtern zu ersetzen?

+0

Was bedeutet "langsam drucken"? Fragen Sie, wie Sie eine Zeichenfolge anzeigen, indem Sie jeweils ein Zeichen mit einer Verzögerung zwischen den einzelnen Zeichen anzeigen? –

+0

Können Sie Beispielcode (oder Code, den Sie bereits haben) und, wenn möglich, ein Bild von dem, was Sie wollen, hinzufügen? –

Antwort

1

Wenn ich Sie richtig verstehe, möchten Sie eine Beschriftung erstellen, die langsam ein Zeichen nach dem anderen aufdeckt (dh: zuerst sehen Sie "s", dann "st", dann "str", usw.).

Das kann Kegel sein, indem Sie eine benutzerdefinierte Beschriftungsklasse erstellen und after verwenden, um den Text langsam zu enthüllen. Jedes Mal, wenn die Funktion aufgerufen wird, wird ein Zeichen aus der Liste der verbleibenden Zeichen entfernt, an die bereits angezeigten Zeichen angehängt und dann veranlasst, dass es in einer halben Sekunde erneut aufgerufen wird.

Zum Beispiel:

class SlowLabel(tk.Label): 
    def __init__(self, *args, **kwargs): 
     tk.Label.__init__(self, *args, **kwargs) 

     self.text = self.cget("text") 
     self.configure(text="") 

     self.reveal_text() 

    def reveal_text(self): 
     if len(self.text) > 0: 
      text = self.cget("text") + self.text[0] 
      self.configure(text=text) 
      self.text = self.text[1:] 
      self.after(500, self.reveal_text) 

Sie diese Klasse verwenden können, genau wie Sie ein normales Etikett verwenden würde:

import tkinter as tk 
root = tk.Tk() 
for text in ("string1", "string2", "string3"): 
    label = SlowLabel(root, text=text, width=20, anchor="w") 
    label.pack(side="top", fill="x") 

Wenn Sie Tasten lieber als Etiketten, erben nur von tk.Button statt tk.Label .

+0

Das brauche ich, obwohl ich (als Anfänger) immer noch nicht verstehe, ob der Text zuerst gedruckt wird, dann in der zweiten, dann in der dritten etc. Oder werden alle Etiketten gleichzeitig ausgefüllt? Die zweite Frage ist, muss ich nur beide Instanzen von "tk.Label" zu "tk.Button" ändern oder muss ich einen anderen Code ändern? –

+0

@AlexF: Anstatt eine Frage zu stellen, führen Sie den Code aus und sehen Sie, was er tut. –

Verwandte Themen