Tkinter 主迴圈 mainloop
Tkinter 被稱為用 Python 編寫的流行模組。它是建立 GUI 應用程式中最簡單的模組。
我們可以建立和視覺化許多視覺元素。mainloop()
方法在建立 GUI 介面中起著最重要的作用。
本教程描述了 mainloop()
方法的重要性,並試圖瞭解該方法背後發生了什麼。
Python 中的 Tkinter mainloop()
mainloop()
事件就像一個 while
迴圈;這將繼續執行,直到使用者退出。我們可以說 mainloop()
用作更新 GUI 的驅動程式。
如果沒有使用 mainloop()
,視窗螢幕上不會出現任何內容。這種方法採用所有創作並具有協作響應。
以下是我們可以涉及的幾點。
- GUI 視窗就像一個螢幕,每微秒都在不停地破壞,但
mainloop
卻一直在抑制關閉並出現在更新的螢幕上。 - 新的 activity 發生時,人眼看不到破壞前一個螢幕並重新建立一個新螢幕的過程。
- 流程執行速度快,GUI 不會在一微秒內消失。
mainloop()
是 TK()
類的一個方法,它幫助顯示一個 GUI 視窗。按照下面編寫的程式碼進行操作。
from tkinter import *
# Create a gui or screen
gui= Tk()
gui.title('Delftstack')
# Updates activities
gui.mainloop()
輸出:
在 Python 中 Tkinter mainloop()
阻塞
mainloop()
方法不斷阻塞 mainloop
之外的程式碼的原因有很多。
- Python 在
mainloop()
方法呼叫執行控制元件時逐行執行程式碼,一直等到使用者退出程式。 mainloop()
方法不允許 Python 在mainloop
之外執行下一次執行。
此程式碼可以輕鬆區分命令列和基於 GUI 的應用程式。
# GUI based application
from tkinter import *
gui = Tk()
gui.title('Delftstack')
gui.geometry('400x300')
gui.config(bg='DarkOliveGreen')
quit_btn=Button(
gui,
text='quit',
command=lambda:gui.destroy()
)
quit_btn.pack(expand=True)
gui.mainloop()
# command line based application
age= input('Enter your age ')
print('your age is :',age)
我們可以注意到,當 Python 檔案執行時,GUI 應用程式執行,而命令列應用程式無法執行,因為命令列應用程式在程式碼之外;然而,GUI 使用 destroy()
方法退出,然後命令列應用程式執行。
輸出:
Python 中的 Tkinter mainloop()
非阻塞
在前面的示例中,我們學習瞭如何阻止 mainloop
之外的程式碼。
現在我們將演示如何在 mainloop
中使用非阻塞程式碼。
- 執行緒是 Python 的內建庫。該庫用於多工程序,這意味著多程序單獨執行。
- 大型應用程式推薦使用執行緒,但小型應用程式中的執行緒我們可以使用
after()
方法。
from tkinter import *
# create an instance of TK
gui = Tk()
gui.title('Delftstack')
gui.geometry('400x300')
gui.config(bg='DarkOliveGreen')
def AskName():
name = input('Please type your name ')
print('your name is: ',name)
quit_btn=Button(
gui,
text='Quit',
command=lambda:gui.destroy()
)
quit_btn.pack(expand=True)
# call the function after zero second
gui.after(0, AskName)
gui.mainloop()
我們意識到,如果我們執行這段程式碼,GUI 和命令列應用程式會同時執行。
點選這裡閱讀更多關於 mainloop
的資訊。
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn