Exécuter Label avec tkinter [Python]

Exécutez Label avec tkinter. Reportez-vous à [tkinter] Try using Label pour les éléments de base tels que comment organiser le cadre et l'étiquette.

Exemple de code

Un programme qui commence à se déplacer dans la direction opposée lorsque les deux extrémités de «label» sont sur le point de sortir des deux extrémités de Frame.

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()

Résultat d'exécution

move.gif

Commentaire

Pour reproduire comment l'étiquette «se déplace», vous pouvez exécuter de manière récursive la fonction qui déplace __1pixel vers la gauche (droite) __. Autrement dit, la fonction de déplacement est appelée dans la fonction de déplacement qui déplace 1 pixel «étiquette». label.after (n, f) exécute la fonction f après n millisecondes, donc label.after (4, lambda: move (flag, i)) définit la coordonnée x de label sur 1. Exécutez à nouveau la fonction de déplacement après 4 millisecondes sur la ligne (ligne 14) immédiatement avant la fin de la fonction de déplacement à modifier. Cela crée une boucle infinie de la fonction de déplacement et donne l'impression que l'étiquette fonctionne.

[Bonus] Ajoutez des arguments à label.after () et label.bind ()

Une méthode de liaison qui peut exécuter la fonction f lorsqu'un objet est cliqué (clic gauche car il est <1>, clic droit si <3>), comme label.bind (<1>, f). Dans la méthode after qui peut exécuter la fonction g après n millisecondes pour un certain objet comme label.after (n, g) introduit plus tôt, le nom de la fonction est mis dans le deuxième argument, mais s'il est tel quel Impossible de passer des arguments. Si vous écrivez label.after (n, move (flag, i)), une erreur se produira. C'est parce que move (flag, i) () est en fait appelé.

Je voudrais présenter deux façons de résoudre ce problème. __ (1) Notation avec lambda (fonction anonyme) __ Autrement dit, cela devrait être label.after (n, lambda: move (flag, i)). Veuillez vous référer à Python lambda est facile à comprendre pour lambda.

__ (2) Fonction Nest __ Nest = "imbriqué". En Python, vous pouvez définir une autre fonction dans une fonction. Ici, comme introduit précédemment, label.after (n, move (flag, i)) se réfère en fait à move (flag, i) () au lieu de move (flag, i) . Donc, vous pouvez créer cette forme de force. Je ne veux pas le recommander car le code a tendance à se salir (tout en disant que lire les résultats de recherche Twitter comme un certain site vidéo [python] C'est un secret que certains spaghettis contiennent de nombreuses fonctions imbriquées).

L'exemple de code ci-dessus fonctionne correctement si vous procédez comme suit.

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

(Omission)

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

sale.

Recommended Posts

Exécuter Label avec tkinter [Python]
Exécutez prepDE.py avec python3
Exécutez Blender avec python
Exécutez iperf avec python
Programmation avec Python et Tkinter
Exécutez python avec PyCharm (Windows)
Exécutez Python avec CloudFlash (arm926ej-s)
Exécutez Rotrics DexArm avec l'API Python
Exécutez mruby avec Python ou Blender
Exécutez XGBoost avec Cloud Dataflow (Python)
Exécutez Aprili depuis Python sur Orange
Exécutez python3 Django1.9 avec mod_wsgi (déployer)
Jusqu'à ce que Python fonctionne sur Apache
[Python] Création de plusieurs fenêtres avec Tkinter
Lecture vidéo avec son sur python !! (tkinter / imageio)
FizzBuzz en Python3
Grattage avec Python
Exécutez le servo avec Python sur ESP32 (Windows)
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
MVC avec Tkinter
Développer des applications Windows avec Python 3 + Tkinter (Préparation)
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Exécutez une application Web Python avec Docker
Excel avec Python
Micro-ordinateur avec Python
[Python] Modèle Tkinter
Cast avec python
Créer un cadre avec un arrière-plan transparent avec tkinter [Python]
Outil de rognage d'image GUI réalisé avec Python + Tkinter
Python> Exécuter avec des arguments d'exécution> Utiliser import argparse
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
Comment utiliser tkinter avec python dans pyenv
Exécutez l'API vSphere de VMware vSphere 6 avec le script Python (pyvmomi)
Exécutez Flask sur CentOS avec python3.4, Gunicorn + Nginx.
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1