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个)
在第二个出现“完成”的对话框出现之前,如何使用“请等待”关闭对话框?
谢谢。
答案 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
?