Walaupun Python menyediakan berbilang kotak mesej yang boleh memenuhi keperluan kebanyakan orang biasa, ia tidak cukup fleksibel, jadi kadangkala anda perlu menyesuaikan kotak mesej.
Intipati kotak mesej ialah tetingkap, sekeping maklumat dan dua butang
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
ialah pembolehubah global yang mewakili fon dan saiznya apabila label
dan button
dibuat, ia akan ditetapkan melalui parameter font
.
pack
ialah kaedah susun atur Seperti namanya, ia adalah pembungkusan. Jika anda menganggap tetingkap sebagai kotak, maka anda mesti membungkusnya di mana sahaja anda mempunyai masa. Sebagai contoh, jika terdapat lapisan pakaian di bahagian bawah, dan tidak ada ruang untuk meletakkannya, mereka hanya boleh diletakkan pada lapisan kedua; tempat, jadi bata lain boleh diletakkan di sebelah bata.
Dalam kes di atas, tekan label
ke bawah dari atas, dan kemudian letakkan butang di sebelah kiri dan kanan di bawah.
Antaranya, kedua-dua 是
dan 否
perlu beroperasi pada tetingkap, jadi fungsi panggil balik menggunakan ungkapan lambda
untuk boleh beroperasi pada tetingkap. <Enter>
menunjukkan bahawa ia bertindak balas apabila tetikus terapung di atas komponen, dan fungsi panggil baliknya perlu memasukkan parameter evt
.
Kesannya adalah seperti berikut
Seterusnya tulis logik 是
iaitu selepas menutup tetingkap sedia ada, tetingkap baharu akan muncul, tetingkap baharu hanya perlu mempunyai
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
untuk menutup tetingkap semasa. Selepas tetingkap semasa ditutup, buat tetingkap baharu pada kedudukan tetingkap asal win_winfo_x, win_winfo_y
digunakan untuk mendapatkan kedudukan tetingkap.
Kesannya adalah seperti berikut
dan kemudian tulis logik 否
apabila tetikus melayang di atas butang 否
, gerakkan kedudukan tetingkap. Kerana
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)
menggunakan fungsi geometry
, anda bukan sahaja boleh mengisytiharkan kedudukan tetingkap semasa mencipta tetingkap, tetapi juga mengubah suai kedudukan tetingkap pada bila-bila masa dan di mana-mana sahaja. Dengan cara ini, apabila tetikus terapung pada butang 否
, tetingkap akan disembunyikan sebelum mengklik.
Kesannya adalah seperti berikut
Atas ialah kandungan terperinci Cara menggunakan Python+tkinter untuk menulis artifak pengakuan paksa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!