为什么 python gui 模块不能处理 while true loops 是 python 问题还是模块问题?

问题描述 投票:0回答:1

在用 python 创建项目时,我想创建一个 GUI,所以我决定使用模块 tkinter。在我的代码中尝试实现 while True 循环后,GUI 似乎已冻结且无法使用,所以我想问一下这是 GUI 模块本身的问题,还是 Python 本身的问题?其他语言也一样吗?

python tkinter kivy
1个回答
0
投票

这是大多数 GUI 框架的本质。要使 GUI 正常工作,它必须能够接收稳定的事件流以进行处理。这些事件可以是按钮点击、键盘输入和系统生成的事件,操作系统告诉窗口它需要刷新。

处理这些事件的代码通常称为事件循环——它是一个全局循环,等待事件,将它们与注册的处理程序进行比较,然后调用处理程序。在 tkinter 中,调用 mainloop 函数会启动此事件循环。

当您在 GUI 运行的同一线程中放置一个长循环或无限循环时,当该代码正在运行时,GUI 框架无法处理这些事件。因此,GUI 似乎被冻结了,因为它无法自行刷新。

一些工具包可能会在单独的线程中运行事件循环。 tkinter 和其他基于 python 的 GUI 框架可能不是这种情况。使用 tkinter,在某些平台上,需要在创建小部件的同一线程中运行事件循环。在 OSX 上,这是一个严格的要求。

如果您需要在 GUI 程序或任何长时间运行的函数中创建自己的循环,最好为任何此类代码创建一个单独的线程。

© www.soinside.com 2019 - 2024. All rights reserved.