HOWTO · Tkinter

Tkinter 主迴圈 mainloop

在本教程中,我們描述了 mainloop() 方法的重要性,並嘗試瞭解該方法背後發生了什麼。

本頁內容

Tkinter 被稱為用 Python 編寫的流行模組。它是建立 GUI 應用程式中最簡單的模組。

我們可以建立和視覺化許多視覺元素。mainloop() 方法在建立 GUI 介面中起著最重要的作用。

本教程描述了 mainloop() 方法的重要性,並試圖瞭解該方法背後發生了什麼。

Python 中的 Tkinter mainloop()

mainloop() 事件就像一個 while 迴圈;這將繼續執行,直到使用者退出。我們可以說 mainloop() 用作更新 GUI 的驅動程式。

如果沒有使用 mainloop(),視窗螢幕上不會出現任何內容。這種方法採用所有創作並具有協作響應。

以下是我們可以涉及的幾點。

  1. GUI 視窗就像一個螢幕,每微秒都在不停地破壞,但 mainloop 卻一直在抑制關閉並出現在更新的螢幕上。
  2. 新的 activity 發生時,人眼看不到破壞前一個螢幕並重新建立一個新螢幕的過程。
  3. 流程執行速度快,GUI 不會在一微秒內消失。

mainloop() 是 TK() 類的一個方法,它幫助顯示一個 GUI 視窗。按照下面編寫的程式碼進行操作。

from tkinter import *

# Create a gui or screen
gui = Tk()
gui.title("Delftstack")
# Updates activities
gui.mainloop()

輸出:

示例 tkinter 主迴圈

在 Python 中 Tkinter mainloop() 阻塞

mainloop() 方法不斷阻塞 mainloop 之外的程式碼的原因有很多。

  1. Python 在 mainloop() 方法呼叫執行控制元件時逐行執行程式碼,一直等到使用者退出程式。
  2. 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() 方法退出,然後命令列應用程式執行。

輸出:

Tkinter 主迴圈阻塞

Python 中的 Tkinter mainloop() 非阻塞

在前面的示例中,我們學習瞭如何阻止 mainloop 之外的程式碼。

現在我們將演示如何在 mainloop 中使用非阻塞程式碼。

  1. 執行緒是 Python 的內建庫。該庫用於多工程序,這意味著多程序單獨執行。
  2. 大型應用程式推薦使用執行緒,但小型應用程式中的執行緒我們可以使用 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 和命令列應用程式會同時執行。

Tkinter Mainloop 非阻塞

點選這裡閱讀更多關於 mainloop 的資訊。