Python은 대부분의 일반 사람들의 요구를 충족할 수 있는 여러 메시지 상자를 제공하지만 유연성이 충분하지 않으므로 메시지 상자를 사용자 정의해야 하는 경우가 있습니다.
메시지 상자의 본질은 창과 정보, 두 개의 버튼입니다
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
는 에서 글꼴과 크기를 나타내는 전역 변수입니다. >label code>와 <code>button
이 생성되면 font
매개변수를 통해 설정됩니다. 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
은 이름에서 알 수 있듯이 포장을 의미하는 레이아웃 방법입니다. 창문을 상자로 생각한다면 시간이 날 때마다 포장해야 합니다. 예를 들어, 맨 아래에 옷 한 겹이 있고 그것을 놓을 공간이 없으면 두 번째 층에만 놓을 수 있습니다. 두 번째 층에 벽돌이 하나만 있으면 다른 층에도 여전히 공간이 있습니다. 다른 벽돌을 벽돌 옆에 놓을 수 있도록 배치합니다. 위의 경우, 위에서 아래로 라벨
을 누른 뒤, 아래 좌우에 버튼을 배치해주세요. 그 중 yes
든 no
든 윈도우가 동작해야 하므로 콜백 함수는 lambda
표현식을 사용하여 이를 수행할 수 있습니다. 창을 조작하십시오. 조작을 수행하십시오. <enter></enter>
는 마우스가 구성요소 위에 떠 있을 때 응답하며 콜백 함수에 evt
매개변수를 입력해야 함을 의미합니다.
is
로직을 작성해 주세요. 즉 기존 창을 닫으면 새 창이 뜹니다. 새 창은 have one🎜rrreee🎜destroy code>즉, 현재 창을 닫습니다. 현재 창이 닫힌 후 원래 창 위치에 새 창을 만듭니다. <code>win_winfo_x, win_winfo_y
는 창 위치를 얻는 데 사용됩니다. 🎜🎜효과는 다음과 같습니다🎜🎜🎜🎜창 이동🎜🎜그 다음 No
논리를 작성합니다. No
버튼 위에 마우스를 올리면 창 위치를 이동합니다. . 🎜rrreee🎜는 geometry
함수를 사용하기 때문에 창 생성 시 창 위치를 선언할 수 있을 뿐만 아니라 언제 어디서나 창 위치를 수정할 수 있습니다. 이런 방식으로 마우스를 No
버튼 위로 가져가면 창을 클릭하기도 전에 숨겨집니다. 🎜🎜효과는 다음과 같습니다🎜🎜🎜🎜위 내용은 Python+tkinter를 사용하여 강제 고백 아티팩트를 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!