帮助从类调用def

2024-04-26 04:43:31 发布

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

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!','')

我得到一个错误: messageBox().done() TypeError:done()只接受2个参数(给定1个)

在第二个显示“完成”的对话框之前,如何关闭带有“请稍候”的对话框??在

谢谢。在


Tags: selfgtkgettitleinitdefmsgwidget
2条回答

您选择如下定义done方法:

def done(self,w):

所以它确实需要两个参数,即您调用它的msgbox实例,以及第二个神秘的w参数,它永远不会使用。当你调用调用done时,你不会传递那个神秘且完全无用的论点。那么为什么不把def改为:

^{pr2}$

摆脱神秘的,无用的w,你现在需要但没有提供?在

看起来你想要的

self.msg.done()

关闭现有的“请稍候…”消息框。msgbox().done()创建一个新的消息框,然后在此新实例上调用done。在

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

^{pr2}$

离题

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!','')

相关问题 更多 >

    热门问题