从Tkinter执行用户输入的Python命令吗?

时间:2019-12-22 22:16:52

标签: python python-2.7 tkinter tkinter-entry

我正在寻找一种能够从Tkinter GUI运行python命令的方法。 (我正在使用python 2.7。)

示例:

import Tkinter
root = Tk()

def run():
   print 'smth'

def runCommand():
   code...

button = Button(root, text = 'smth', command = run).pack()

entry = Entry(root, width = 55, justify = 'center').pack()
entry_button = Button(root, text = 'Run', command = runCommand).pack()

root.mainloop()

我想在条目中输入print 'hello',当我按下 Run 按钮时,它实际上会运行命令print 'hello'

这怎么办?如果不是,那我可以在Tkinter中添加命令行小部件吗?

1 个答案:

答案 0 :(得分:0)

如果您想一次评估一个表达式(例如print 'hello),那么eval()就是您想要的。

def runCommand():
   eval(entry.get())

另一个选项是exec();您必须decide才能更好地满足您的用例需求。可能的危险已经比我可能的描述得更好:

  

用户可以将此选项用作在计算机上运行代码的选项。如果导入了eval(input())和os,则一个人可以在input()中输入os.system('rm -R *'),这将删除您主目录中的所有文件。   来源:CoffeeRain

请注意(如stovfl所述),您应该分别声明和打包小部件。

即,更改此内容:

entry = Entry(root, width = 55, justify = 'center').pack()

对此:

entry = Entry(root, width = 55, justify = 'center')
entry.pack()

否则,您最终将存储pack()(即None)的值,而不是存储小部件(ButtonEntry对象)