查看源代码
出自Linux Wiki
对
PyGTK编写多线程程序
的源代码
根据以下的原因,您无权限进行编辑这个页面操作:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
虽然在[[PyGTK]]中[[Python]]有关多线程的库都可以使用,但其行为常现异常,所以一定要按照PyGTK的要求编写多线程应用程序。 ==只允许主线程修改图形界面== 这是较常用的一种方式,但编写时略显复杂。 首先,在程序初始化时调用('''一定在gtk.main()之前运行'''): gobject.threads_init() 多线程的实现方式与纯Python相同: <source lang=python> t=threading.Thread(target=新线程的函数) t.start() </source> 要修改界面的代码则使用'''gobject.idle_add'''加到GTK的主循环中。 <source lang=python> gobject.idle_add(新线程函数, 参数) </source> 注意如果新线程函数返回True,则该函数仍在GTK的主循环中,如果返回False,则退出主循环。 下面的例子是PyGTK.org上给出的: <source lang=python> import threading import time import gobject import gtk gobject.threads_init() class MyThread(threading.Thread): def __init__(self, label): super(MyThread, self).__init__() self.label = label self.quit = False def update_label(self, counter): self.label.set_text("Counter: %i" % counter) return False def run(self): counter = 0 while not self.quit: counter += 1 gobject.idle_add(self.update_label, counter) time.sleep(0.1) w = gtk.Window() l = gtk.Label() w.add(l) w.show_all() w.connect("destroy", lambda _: gtk.main_quit()) t = MyThread(l) t.start() gtk.main() t.quit = True </source> ==允许所有线程修改图形界面== {{Note|有人报告说这一方法导致程序在Windows中无法运行,但产生这一问题的原因应是他们忘了写'''gtk.threads_enter()''',所以请按照下面的说明写程序。}} 这种方法要简单很多。与前面类似,在程序初始化时调用: gtk.gdk.threads_init() 不过要把gtk.main()用下面两个函数括起来: gtk.threads_enter() gtk.main() gtk.threads_leave() 其它线程也是如此,在修改界面内容的代码前后加上gtk.threads_enter()、gtk.threads_leave() [[Category: PyGTK编程]]
在这个页面上使用的模板有:
Template:Note
(
查看源码
)
返回到
PyGTK编写多线程程序
。
导航
首页
社区入口
当前事件
最近更改
随机页面
帮助
查看
页面
讨论
查看源代码
历史
个人工具
登录/创建账户
搜索
简体繁体转换
不转换
简体
繁體
工具箱
链入页面
链出更改
特殊页面