2012-09-03 50 views
0

在一个sublimetext插件这个Python代码:设置属性和on_done方法

class PersonCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     self.name = None 
     self.view.window().show_input_panel("Name", "", self.on_done, None, None) 
     print "run: ", self.name 

    def on_done(self, value): 
     self.name = value 
     print "on_done: ", self.name 

,如果我在输入面板中输入“杰克”我希望

run: Jack 

但是我实际上 GET :

run: None 
on_done: Jack 

为什么我会得到这个结果?我可以使用输入面板作为读取参数的提示吗?如果是这样,怎么办?

+0

你期望输出什么,为什么这是一个问题? –

+0

我期望跑步:Jack –

+0

自己是指对象,任何方法都可以改变on_done为什么不行? –

回答

1

在这种情况下,on_done函数是一个回调函数。当这条线路运行时:

self.view.window().show_input_panel("Name", "", self.on_done, None, None) 

它*不立即调用on_done *。该函数只设置self.on_done作为输入值后将被调用的方法。这意味着之后的行,print "run: ", self.name,将发生在任何值输入之前。

函数on_done稍后发生(可能是几秒或几分钟后,具体取决于用户何时输入值)。只有这样,才会设置该值并发生print "on_done: ", self.name声明。

+0

我在运行结束时检查了很多他们总是使用self.view.window()。show_input_panel(...)的代码,非常感谢 –