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