Tkinter 主循环 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 非阻塞

查看笔记

扫码一下
查看教程更方便