为了账号安全,请及时绑定邮箱和手机立即绑定

如何避免 tkinter GUI 冻结?

如何避免 tkinter GUI 冻结?

隔江千里 2022-07-19 17:06:50
import tkinter as tkfrom tkinter import filedialogfrom PIL import ImageTk, Imageimport osimport argparseimport numpy as npdb_path = "/fulldatabase/"output = Noneoutput_path = Nonedef test():    root = tk.Tk()    root.withdraw()    dirname = tk.filedialog.askdirectory(parent=root, initialdir="./", title='select input query folder')    root.destroy()    return (dirname)if __name__ == "__main__":    in_dir = test()    path = os.listdir(in_dir)    parser = argparse.ArgumentParser()    parser.add_argument('--output', '-o')    args = parser.parse_args()    output_path = args.output    window = tk.Tk()    window.title("My App")    window.geometry("1024x800")    app = Application(window, in_dir, path)    window.mainloop()    output.close()我有一个输入查询文件夹,其中包含一组不同的花卉图像,例如 rose_3、lily_5 和 jasmine_2,其中下划线后的数字表示其实例编号。我想从输入文件夹中选择一个图像并将其显示在 tkinter 窗口上。我还想在同一个 tkinter 窗口上显示玫瑰的所有其他图像(从完整数据库,即另一个文件夹中读取)说 rose_1、rose_2、rose_4 和 rose_5(如果我在数据库中有 5 个玫瑰图像)它的右侧同时低于另一个。所有这一切都与此代码完美配合,但 GUI 经常冻结。有人可以帮我吗?
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

也许你应该用线程来做。创建一个线程来加载您的图像并检查图像是否已完成加载。并返回一个值是否完成。



查看完整回答
反对 回复 2022-07-19
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您应该在单独的线程中加载(以及可能的进一步处理)图像。

创建一个线程来加载您的图像,一旦我完成了该任务,您就可以将图像发送到 GUI 进行渲染。

大多数甚至不是所有的 GUI 框架都使用一个主线程(其中不断运行一个循环)来专门处理与 GUI 相关的任务,例如处理用户输入(鼠标、键盘等)、渲染等。一旦您在该线程中引入不同的负载(例如加载图像),该线程就不再能够仅专注于特定于 GUI 的任务。这会导致您的 GUI 冻结。


查看完整回答
反对 回复 2022-07-19
  • 2 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信