python – 为什么在Tkinter进程后出现ttk Progressbar
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么在Tkinter进程后出现ttk Progressbar,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1953字,纯文字阅读大概需要3分钟。
内容图文
![python – 为什么在Tkinter进程后出现ttk Progressbar](/upload/InfoBanner/zyjiaocheng/968/2155eff5c2f54809a9e51dcb76bd0c01.jpg)
我想在Tkinter菜单命令上创建一个大文本,并通过进度条提供视觉支持.虽然进度条要在后续耗时循环之前启动,但只有在创建和显示大文本后才会显示进度条.
def menu_bar(self):
self.create_menu.add_command(label="Create large file",
command=self.create_large_file)
def create_large_file(self):
self.progressbar = ttk.Progressbar(self.master, mode='indeterminate')
self.progressbar.pack()
self.progressbar.start()
self.text.delete(1.0, 'end')
self.file_content = []
i = 0
while i < 2000000:
line = lfd.input_string
self.file_content.append(line + "\n")
i += 1
self.file_content = ''.join(self.file_content)
self.text.insert(1.0, self.file_content)
解决方法:
我认为问题在于耗时的循环阻止了tkinter事件循环mainloop()的运行.换句话说,当您的工作密集型函数在与GUI相同的线程中运行时,它会通过占用解释器来干扰它.
为了防止这种情况,您可以使用辅助Thread来运行您的功能并在主线程中运行GUI及其进度条.为了让您了解如何执行此操作,这是一个简单的示例,我从另一个(无关的)progressbar question中的代码派生,以显示这样的事情是多么容易.注意:通常建议不要让辅助线程直接访问主线程的tkinter对象.
from Tkinter import *
import ttk
import time
import threading
def foo():
time.sleep(5) # simulate some work
def start_foo_thread(event):
global foo_thread
foo_thread = threading.Thread(target=foo)
foo_thread.daemon = True
progressbar.start()
foo_thread.start()
root.after(20, check_foo_thread)
def check_foo_thread():
if foo_thread.is_alive():
root.after(20, check_foo_thread)
else:
progressbar.stop()
root = Tk()
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
progressbar = ttk.Progressbar(mainframe, mode='indeterminate')
progressbar.grid(column=1, row=100, sticky=W)
ttk.Button(mainframe, text="Check",
command=lambda:start_foo_thread(None)).grid(column=1, row=200,
sticky=E)
for child in mainframe.winfo_children():
child.grid_configure(padx=5, pady=5)
root.bind('<Return>', start_foo_thread)
root.mainloop()
内容总结
以上是互联网集市为您收集整理的python – 为什么在Tkinter进程后出现ttk Progressbar全部内容,希望文章能够帮你解决python – 为什么在Tkinter进程后出现ttk Progressbar所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。