Python主窗口卡在时间上

2024-10-17 12:24:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在我的主窗口中打开这个函数并保持这个函数运行,因为它检查一些状态(同样是()函数,我从这个例子中删除了检查)。这个函数必须保持原样。但是主窗口挂着。请帮忙。你知道吗

# -*- coding: utf-8 -*-
import pygtk
pygtk.require("2.0")
import gtk 
import gobject
import time
gtk.gdk.threads_init()

class App:
    def __init__(self):
        self.okno = gtk.Window(gtk.WINDOW_TOPLEVEL) 
        self.okno.resize(400,150)
        self.okno.show_all()

        self.again()


    def again(self):
        i=0
        while 1:
            print i
            i=i+1           

if __name__ == "__main__":
    app = App()
    gtk.threads_enter()
    gtk.main()
    gtk.threads_leave()

已更改:

# -*- coding: utf-8 -*-
import pygtk
pygtk.require("2.0")
import gtk 
import gobject
import time
import threading, sys

gtk.gdk.threads_init()

class App(threading.Thread):
    def __init__(self):
        self.okno = gtk.Window(gtk.WINDOW_TOPLEVEL) 
        self.okno.resize(400,150)
        self.okno.show_all()
        self.again()        

    def again(self):
        i=0
        while 1:
            print i
            sys.stdout.flush()
            i=i+1       
            time.sleep(1)

if __name__ == "__main__":
    gtk.threads_enter()
    threading.Thread(target=App).start()
    gtk.threads_leave()
    gtk.main()

Tags: 函数importselfappgtktimeinitmain
1条回答
网友
1楼 · 发布于 2024-10-17 12:24:38

不能从不同的线程使用gtkapi;只允许一个线程使用GTK,而该线程调用了Gtk.main()(并初始化了库,在导入GTK模块时由Python绑定自动完成)。你知道吗

在GTK中使用线程的正确方法是创建一个工作线程来执行长时间运行的作业,并且每当需要更新UI时,都应该使用GLib.idle_add()在主循环中安排回调。传递给idle_add()函数的可调用函数保证在运行主循环的线程中被调用。你知道吗

如果使用工作线程,则不需要使用threads_enter()threads_leave()API(而且这些函数无论如何都是不可移植的;在GTK3.0中它们已经被弃用)。你知道吗

相关问题 更多 >