2016-10-09 32 views
-1

我遇到的问题是,当我想创建一个按钮时,应该按下某个按钮时,该操作会在程序启动时立即发生。更清楚地说,我在函数中有一个os.system("sudo python /home/pi/module2.py")。这是函数可能是什么样子(哦,是啊,我进口的OS和Tkinter的为TK):创建按钮的过早操作

def __init__(self, parent, controller): 
    button = tk.Button(self, 
     text="Addition", 
     command=os.system("sudo python /home/pi/module2.py") 

如何处理此情况是,os.system功能运行别的开始之前,因为它是在一个在文件顶部的函数,并且我调用文件底部的函数。所以,即使os.system在函数中,它仍然在不应该运行时运行。有人可以帮忙吗?

+0

欢迎的StackOverflow!我把问题归结为问题的核心。这样,它有更好的帮助他人的机会,因为他们可能会遇到同样的问题,但是在你长时间的介绍和误导性的标题中找不到它。请不要沮丧:)它只是为了改善StackOverflow。 – Alfe

回答

0

您需要将一个函数传递给command=,它可以做你想做的事。在您的解决方案中,您传递给command=调用此函数的结果,因此它过早地执行。

编码本的典型方法是:

def __init__(self, parent, controller): 

    def call_module2(*args, **kwargs): # accept all possible arguments 
     os.system("sudo python /home/pi/module2.py") 

    button = tk.Button(self, 
     text="Addition", 
     command=call_module2) 

或者,如果您希望通过lambda使用匿名函数:

def __init__(self, parent, controller): 
    button = tk.Button(self, 
     text="Addition", 
     command=lambda *args, **kwargs: 
      os.system("sudo python /home/pi/module2.py")) 
+0

好的。无论如何,我需要展示另一个框架以及使用os.system。我用lambda来显示第二帧。 – Jordanlegoland

+0

Ohk nvm。解决了它。 – Jordanlegoland