当前位置: 首页 > 面试题库 >

请简单的pygtk和线程示例

霍襦宗
2023-03-14
问题内容

有人可以给我一个以这​​种方式涉及线程的简单示例。

我的代码的问题是,当我单击按钮One时,GUI冻结直到完成。我希望在执行def时按钮保持响应。我该如何解决?

class fun:
        wTree = None
        def __init__( self ):                
                self.wTree = gtk.glade.XML( "ui.glade" )

                dic = {
                        "on_buttonOne" : self.one,
                        "on_buttonTwo" : self.two,
                }
                self.wTree.signal_autoconnect( dic )              
                gtk.main()

        def sone(self, widget):
           time.sleep(1)
           print "1"
           time.sleep(1)
           print "2"
           time.sleep(1)
           print "3"
        def stwo(self, widget):
           time.sleep(1)
           print "4"
           time.sleep(1)
           print "5"
           time.sleep(1)
           print "6"
do=fun()

求您了,帮帮我。


问题答案:

使用gtk时,它将运行一个主循环,并将您想做的 所有事情 安排为gtk循环的事件。您不需要线程即可执行任何操作。

这是一个完整的,完整的,随时可以运行的示例,用于glib.timeout_add执行您想要的操作。

请注意,单击两个按钮(或单击一个按钮多次)不会冻结gui,并且所有操作都是“同时”发生的…

import gtk
import glib

def yieldsleep(func):
    def start(*args, **kwds):
        iterable = func(*args, **kwds)
        def step(*args, **kwds):
            try:
                time = next(iterable)
                glib.timeout_add_seconds(time, step)
            except StopIteration:
                pass
        glib.idle_add(step)
    return start

class Fun(object):
    def __init__(self):
        window = gtk.Window()

        vbox = gtk.VBox()

        btnone = gtk.Button('one')
        btnone.connect('clicked', self.click_one)
        btnone.show()
        vbox.pack_start(btnone)

        btntwo = gtk.Button('two')
        btntwo.connect('clicked', self.click_two)
        btntwo.show()
        vbox.pack_start(btntwo)

        vbox.show()
        window.add(vbox)
        window.show()

    @yieldsleep
    def click_one(self, widget, data=None):
        yield 1 #time.sleep(1)
        print '1'
        yield 1 #time.sleep(1)
        print '2'
        yield 1 #time.sleep(1)
        print '3'

    @yieldsleep
    def click_two(self, widget, data=None):
        yield 1 #time.sleep(1)
        print '4'
        yield 1 #time.sleep(1)
        print '5'
        yield 1 #time.sleep(1)
        print '6'

do = Fun()
gtk.main()


 类似资料:
  • 问题内容: 我在处理pyGTK应用程序时遇到一些问题。我给线程一些时间来完成其任务,如果有问题,我还是继续继续,只是警告用户。但是,一旦我继续,该线程就会停止,直到调用gtk.main_quit为止。这让我感到困惑。 相关代码: .................................... 问题答案: 首先,不要继承,使用。 其次,很可能导致您明显的阻塞的原因是它采用了一个默认值为的参

  • 本文向大家介绍C#实现线程池的简单示例,包括了C#实现线程池的简单示例的使用技巧和注意事项,需要的朋友参考一下 本文以实例演示了C#线程池的简单实现方法。程序中定义了一个对象类,用以包装参数,实现多个参数的传递。成员属性包括两个输入参数和一个输出参数。代码简单易懂,备有注释便于理解。 具体实现代码如下:

  • 在这个部分,我们将谈谈PyGTK GUI(图形用户界面)库和一般的Python语言编程。 About 本教程是PyGTK编程教程。其中的例子在Linux上被创建并测试通过。PyGTK编程教程适合于新手以及高级用户。 PyGTK PyGTK是一套GTK+ GUI库的Python封装。它为创建桌面程序提供了一套综合的图形元素和其它实用的编程工具。它是GNOME项目的一部分。PyGTK是基于LGPL许可

  • 本文向大家介绍Python自定义线程类简单示例,包括了Python自定义线程类简单示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python自定义线程类。分享给大家供大家参考,具体如下: 一. 代码 二. 运行结果 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python Socket编程技巧总结》、《Python数据结构与算法教

  • 这是 PyGTK 教程,本教程适合于初学者和有经验的程序员。

  • 在本教程的这个部分,我们将在菜单下工作 Menubar(菜单栏)是GUI程序最常见部分中的一个。它是位于各种菜单中的一组命令。当在控制台程序中,你必须记住所以那些晦涩难懂的命令,而在菜单里我们将大多数命令分组进入合乎逻辑的部分。因此,有一个公认的标准,那就是菜单能进一步减少大量的时间去学习一个新的程序。 Simple menu 在我们的第一个例子中,我们将创建一个只有一个文件菜单(file men