Führen Sie Label mit tkinter [Python] aus.

Führen Sie Label mit tkinter aus. Weitere Informationen zum Anordnen von Rahmen und Etikett finden Sie unter [tkinter] Try using Label usw.

Beispielcode

Ein Programm, das sich in die entgegengesetzte Richtung bewegt, wenn beide Enden von "label" an beiden Enden von Frame herauskommen.

from tkinter import ttk
import tkinter

def move(flag,i):
    if(flag==True):
        i-=1
    else:
        i+=1
    if(i==0):
        flag=False
    elif(i+label.winfo_reqwidth()==400):
        flag=True
    label.place(x=i,y=150)
    label.after(4,lambda: move(flag,i))

w,h="400","300"
root=tkinter.Tk()
ttk.Style().configure("TP.TFrame", background="snow")
f=ttk.Frame(master=root,style="TP.TFrame",width=w,height=h)
f.pack()
fontsize=20
label=ttk.Label(master=root,text="Labeltext",font=("Meilio",fontsize),foreground="red",background="green")
i=400
flag=True
move(flag,i)
root.mainloop()

Ausführungsergebnis

move.gif

Kommentar

Um zu reproduzieren, wie sich das Label "bewegt", können Sie die Funktion rekursiv ausführen, die __1 Pixel nach links (rechts) __ bewegt. Das heißt, die Verschiebungsfunktion wird in der Verschiebungsfunktion aufgerufen, die 1 Pixel "Label" verschiebt. label.after (n, f) führt die Funktion f nach n Millisekunden aus, also setzt label.after (4, lambda: move (flag, i)) die x-Koordinate von label auf 1. Führen Sie die Verschiebungsfunktion nach 4 Millisekunden in der Zeile (Zeile 14) unmittelbar vor dem Ende der zu ändernden Verschiebungsfunktion erneut aus. Dadurch wird eine Endlosschleife der Verschiebungsfunktion erstellt und die Beschriftung scheint zu funktionieren.

[Bonus] Fügen Sie label.after () und label.bind () Argumente hinzu.

Eine Bindemethode, die die Funktion f ausführen kann, wenn auf ein Objekt geklickt wird (Linksklick, da es <1> ist, Rechtsklick, wenn <3>), z. B. "label.bind (<1>, f)". In der after-Methode, die die Funktion g nach n Millisekunden für ein bestimmtes Objekt wie "label.after (n, g)" ausführen kann, das zuvor eingeführt wurde, wird der Funktionsname in das zweite Argument eingefügt, aber wenn es so ist, wie es ist Argumente können nicht übergeben werden. Wenn Sie "label.after (n, move (flag, i))" schreiben, tritt ein Fehler auf. Dies liegt daran, dass move (flag, i) () tatsächlich aufgerufen wird.

Ich möchte zwei Möglichkeiten vorstellen, um dies zu lösen. __ (1) Notation mit Lambda (anonyme Funktion) __ Das heißt, es sollte "label.after (n, lambda: move (flag, i))" sein. Informationen zu Lambda finden Sie unter Python-Lambda ist leicht zu verstehen.

__ (2) Nestfunktion __ Nest = "verschachtelt". In Python können Sie eine andere Funktion innerhalb einer Funktion definieren. Wie bereits erwähnt, bezieht sich "label.after (n, move (flag, i))" tatsächlich auf "move (flag, i) ()" anstelle von "move (flag, i)". `So können Sie diese Form zwangsweise erstellen. Ich möchte dies nicht empfehlen, da der Code dazu neigt, schmutzig zu werden (während gesagt wird, dass Twitter-Suchergebnisse wie eine bestimmte Video-Site abspielen [Python] Es ist ein Geheimnis, dass einige Spaghetti viele verschachtelte Funktionen enthalten.

Der obige Beispielcode funktioniert ordnungsgemäß, wenn Sie Folgendes tun.

from tkinter import ttk
import tkinter

def move(i):
    def x():
        global i
        global flag
        if(i==0):
            flag=False 
        elif(i+label.winfo_reqwidth()==400):
            flag=True
        if(flag==True):
            i-=1
        else:
            i+=1
        label.place(x=i,y=150)
        label.after(4,move(i))
    return x

(Unterlassung)

i=400
flag=True
label.after(1,move(i))
root.mainloop()

schmutzig.

Recommended Posts

Führen Sie Label mit tkinter [Python] aus.
Führen Sie prepDE.py mit python3 aus
Führen Sie Blender mit Python aus
Führen Sie iperf mit Python aus
Programmieren mit Python und Tkinter
Führen Sie Python mit PyCharm aus (Windows)
Führen Sie Python mit CloudFlash aus (arm926ej-s)
Führen Sie Rotrics DexArm mit der Python-API aus
Führen Sie mruby mit Python oder Blender aus
Führen Sie XGBoost mit Cloud Dataflow (Python) aus.
Führen Sie Aprili von Python auf Orange aus
Führen Sie python3 Django1.9 mit mod_wsgi aus (deploy)
Bis Python auf Apache läuft
[Python] Erstellen mehrerer Fenster mit Tkinter
Videowiedergabe mit Ton auf Python !! (tkinter / imageio)
FizzBuzz in Python3
Scraping mit Python
Führen Sie das Servo mit Python unter ESP32 (Windows) aus.
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
MVC mit Tkinter
Entwickeln Sie Windows-Apps mit Python 3 + Tkinter (Vorbereitung)
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Führen Sie eine Python-Webanwendung mit Docker aus
Excel mit Python
Mikrocomputer mit Python
[Python] Tkinter-Vorlage
Mit Python besetzen
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
GUI-Bildschneidewerkzeug mit Python + Tkinter
Python> Mit Laufzeitargumenten ausführen> Import argparse verwenden
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Wie man tkinter mit Python in Pyenv benutzt
Führen Sie die vSphere-API von VMware vSphere 6 mit dem Python-Skript (pyvmomi) aus.
Führen Sie Flask unter CentOS mit Python3.4, Gunicorn + Nginx aus.
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1