Heim > Artikel > Backend-Entwicklung > Wie man mit Python+tkinter ein Artefakt mit erzwungenen Geständnissen schreibt
Obwohl Python mehrere Nachrichtenfelder bereitstellt, die den Anforderungen der meisten normalen Menschen gerecht werden, sind sie nicht flexibel genug, sodass Sie manchmal das Nachrichtenfeld anpassen müssen.
Das Nachrichtenfeld besteht im Wesentlichen aus einem Fenster, einer Information und zwei Schaltflächen
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 Es handelt sich um eine globale Variable, die die Schriftart und ihre Größe darstellt. Wenn <code>label
und button
erstellt werden, werden sie über den font
festgelegt > Parameter. 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
ist eine Layoutmethode. Wie der Name schon sagt, handelt es sich um eine Verpackung. Wenn Sie sich das Fenster als eine Kiste vorstellen, dann müssen Sie es überall dort einpacken, wo Sie Zeit haben. Wenn sich beispielsweise unten eine Schicht Kleidung befindet und kein Platz zum Ablegen vorhanden ist, können diese nur auf der zweiten Schicht platziert werden. Wenn nur ein Ziegelstein auf der zweiten Schicht platziert wird, ist in der anderen noch Platz Stellen, so dass ein weiterer Stein neben den Stein gelegt werden kann. Im obigen Fall drücken Sie das Label
von oben nach unten und platzieren dann links und rechts unten einen Knopf. Ob ja
oder nein
, das Fenster muss bedient werden, daher verwendet die Rückruffunktion lambda
Ausdrucksmodus, um das Fenster bedienen zu können. <enter></enter>
gibt an, dass es reagiert, wenn die Maus über der Komponente schwebt, und dass seine Rückruffunktion einen Parameter evt
eingeben muss.
is
, also das bestehende Fenster schließen. Danach öffnet sich ein neues Fenster. Das neue Fenster muss nur einen #🎜🎜#rrreee#🎜🎜#destroy
haben, um das aktuelle Fenster zu schließen. Erstellen Sie nach dem Schließen des aktuellen Fensters ein neues Fenster an der Position des ursprünglichen Fensters. win_winfo_x, win_winfo_y
wird verwendet, um die Fensterposition zu ermitteln. #🎜🎜##🎜🎜#Der Effekt ist wie folgt#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Fenster verschieben#🎜🎜##🎜🎜#Dann schreiben Sie die Logik von Nein
, wenn die Maus über Nein
schwebt, verschiebt sich die Fensterposition, wenn die Schaltfläche aktiviert ist. Da #🎜🎜#rrreee#🎜🎜# die Funktion geometry
verwendet, können Sie beim Erstellen des Fensters nicht nur die Fensterposition angeben, sondern diese auch jederzeit und überall ändern. Wenn Sie mit der Maus über die Schaltfläche Nein
fahren, wird das Fenster auf diese Weise ausgeblendet, bevor überhaupt darauf geklickt wird. #🎜🎜##🎜🎜#Der Effekt ist wie folgt#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Das obige ist der detaillierte Inhalt vonWie man mit Python+tkinter ein Artefakt mit erzwungenen Geständnissen schreibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!