Maison >développement back-end >Tutoriel Python >Comment utiliser Python+tkinter pour écrire un artefact de confession forcée
Bien que Python propose plusieurs boîtes de message qui peuvent répondre aux besoins de la plupart des personnes normales, elles ne sont pas assez flexibles, vous devez donc parfois personnaliser la boîte de message.
L'essence de la boîte de message est une fenêtre, une information et deux boutons
import tkinter as tk FONT= ("微软雅黑", 20) def msgBox(txt, yesFunc=None, noFunc=None): win = tk.Tk() win.title("started") win.geometry("400x200+300+100") label = tk.Label(win,text=txt, font=FONT) label.pack(side=tk.TOP,expand=tk.YES,fill=tk.BOTH) btnYes = tk.Button(win, text="是", width=8, font=FONT, command = lambda : yesFunc(win)) btnYes.pack(side=tk.LEFT,expand=tk.YES,fill=tk.Y) btnNo = tk.Button(win, text="否", width=8,font=FONT) btnNo.bind("<Enter>", lambda evt: noFunc(evt, win)) btnNo.pack(side=tk.RIGHT,expand=tk.YES,fill=tk.Y) msgBox("你是不是喜欢我?")
FONT C'est une variable globale qui représente la police et sa taille Lorsque <code>label
et button
sont créés, ils seront définis via la font paramètre. <code>FONT
是一个全局变量,表示字体及其大小,在label
和button
创建的时候,会通过font
参数进行设置。
pack
是一种布局方式,顾名思义,就是打包。如果把窗口想象成是一个箱子,那么打包肯定是哪里有空打哪里。比如最下面放了一层衣服,没地方放了只能放在第二层;如果第二层只放了一个砖头,那么其他位置还有空间,于是可以贴着砖头再放一个砖头。
在上面的案例中,将label
从上面压下来,然后下面左右两侧分别放置一个按钮。
其中,无论是
还是否
,都需要对窗口进行操作,所以回调函数使用了lambda
表达式,从而能够对窗口进行操作。<enter></enter>
表示当鼠标浮动在组件上方时响应,其回调函数需要输入一个参数evt
。
效果如下
接下来写是
的逻辑,即关闭现有窗口后,弹出一个新的窗口,新的窗口只需要有一个
def yesFunc(win): x, y = win.winfo_x(), win.winfo_x() win.destroy() win = tk.Tk() win.geometry(f"400x200+{x}+{y}") txt = "放学去房后小树林\n不见不散\n嘿嘿嘿" label = tk.Label(win,text=txt, font=FONT) label.pack(side=tk.TOP,expand=tk.YES,fill=tk.BOTH) btn = tk.Button(win, text="好的呀", width=12, font=FONT, command=lambda:win.destroy()) btn.pack(side=tk.TOP) msgBox("你是不是喜欢我?", yesFunc)
destroy
即关闭当前窗口。在当前窗口被关闭后,在原来窗口的位置处新建一个窗口,win_winfo_x, win_winfo_y
用于获取窗口位置。
效果如下
然后写否
的逻辑,当鼠标悬浮在否
的按钮上时,挪动窗口的位置。由于
import random def randInt(a, b): r = random.randint(-a, a) while abs(r) < abs(b): r = random.randint(-a, a) return r def noFunc(evt, win): x, y = win.winfo_x(), win.winfo_x() x += randInt(100, 80) y += randInt(30, 20) win.geometry(f"400x200+{x}+{y}") msgBox("你是不是喜欢我?", yesFunc, noFunc)
通过geometry
函数,不仅可以再创建窗口的时候声明窗口位置,而且可以随时随地修改窗口的位置。这样一来,当鼠标浮动在否
pack
est une méthode de mise en page Comme son nom l'indique, il s'agit d'un packaging. Si vous considérez la fenêtre comme une boîte, vous devez alors l'emballer partout où vous en avez le temps. Par exemple, s'il y a une couche de vêtements en bas et qu'il n'y a pas de place pour les mettre, ils ne peuvent être placés que sur la deuxième couche ; s'il n'y a qu'une seule brique sur la deuxième couche, il y a encore de la place dans les autres ; endroits, donc une autre brique peut être placée à côté de la brique. Dans le cas ci-dessus, appuyez sur le étiquette
du haut vers le bas, puis placez un bouton sur les côtés gauche et droit en dessous. Parmi eux, que ce soit oui
ou non
, la fenêtre doit être actionnée, donc la fonction de rappel utilise lambda
mode expression pour pouvoir faire fonctionner la fenêtre. <enter></enter>
indique qu'il répond lorsque la souris flotte sur le composant et que sa fonction de rappel doit saisir un paramètre evt
.
is
, c'est-à-dire fermer la fenêtre existante. Après cela, une nouvelle fenêtre apparaît. La nouvelle fenêtre n'a besoin que d'un #🎜🎜#rrreee#🎜🎜#destroy
pour fermer la fenêtre actuelle. Une fois la fenêtre actuelle fermée, créez une nouvelle fenêtre à l'emplacement de la fenêtre d'origine. win_winfo_x, win_winfo_y
est utilisé pour obtenir la position de la fenêtre. #🎜🎜##🎜🎜#L'effet est le suivant#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Déplacez la fenêtre#🎜🎜##🎜🎜#Ensuite, écrivez la logique de Non
, lorsque la souris survole No
déplace la position de la fenêtre lorsque le bouton est activé. Parce que #🎜🎜#rrreee#🎜🎜# utilise la fonction geometry
, vous pouvez non seulement déclarer la position de la fenêtre lors de la création de la fenêtre, mais également modifier la position de la fenêtre à tout moment et n'importe où. De cette façon, lorsque la souris survole le bouton Non
, la fenêtre est masquée avant même que vous cliquiez dessus. #🎜🎜##🎜🎜#L'effet est le suivant#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!