帮助从课堂调用def

时间:2010-04-11 00:39:53

标签: python pygtk

Noob问题......

class msgbox:
    def __init__(self, lbl_msg = '', dlg_title = ''):
            self.wTree = gtk.glade.XML('msgbox.glade')    

            self.wTree.get_widget('dialog1').set_title(dlg_title) 
            self.wTree.get_widget('label1').set_text(lbl_msg)

            self.wTree.signal_autoconnect( {'on_okbutton1_clicked':self.done} )

    def done(self,w):
            self.wTree.get_widget('dialog1').destroy()

class Fun(object):
    wTree = None
    def __init__(self):      
        self.wTree = gtk.glade.XML( "main.glade" )
        self.wTree.signal_autoconnect( {'on_buttonOne' : self.one,} ) 

        gtk.main()

    @yieldsleep
    def one(self, widget, data=None):
        self.msg = msgbox('Please wait...','')
        yield 500
        self.msg = msgbox().done()  # <----------------???
        self.msg = msgbox('Done!','')

有了这个我得到一个错误: 消息框()。()完成 TypeError:done()只需要2个参数(给定1个)

在第二个出现“完成”的对话框出现之前,如何使用“请等待”关闭对话框?

谢谢。

2 个答案:

答案 0 :(得分:1)

看起来你想要

self.msg.done()

关闭现有的“Please wait ...”消息框。 msgbox().done()创建一个新的消息框,然后在这个新实例上调用done

至于额外参数,您没有使用它,因此将其从done的定义中删除:

def done(self):
    self.wTree.get_widget('dialog1').destroy()

关闭主题

班级msgbox应该继承object,因此您获得了new-style class

msgbox上定义destructor,您无需明确调用msgbox.done,您可能会忘记这样做。

class Msgbox(object):
    ...
    def __del__(self):
        self.wTree.get_widget('dialog1').destroy()

class Fun(object):
    ...
    @yieldsleep
    def one(self, widget, data=None):
        self.msg = Msgbox('Please wait...','')
        yield 500
        # actually, you probably need to delete the old self.msg
        # so it gets destroyed before the new message box is created
        del self.msg
        self.msg = Msgbox('Done!','')

答案 1 :(得分:1)

您已选择定义done方法,如下所示:

def done(self,w):

所以它确实需要两个参数 - 你正在调用它的msgbox实例,以及它从不使用的第二个神秘的w参数。当你调用 done时,你没有通过那个神秘而无用的论点。那么为什么不将def更改为:

def done(self):

摆脱你目前需要但却没有提供的神秘无用的w