【发布时间】:2019-08-22 16:24:05
【问题描述】:
我已经编写了一个菜单,目前当单击一个菜单项时,它会执行print(sometext from menu)。
我需要这个菜单点击选项来打开一个 python 文件而不是打印文件名。
这似乎是一个非常简单的问题,但我是 python 新手,还在学习。
我找不到完全适合这种情况的方法。我试过popen 和execfile 没有运气。虽然我不确定我是否正确使用它们。
import tkinter
def set_menu(window, choices):
menubar = tkinter.Menu(root)
window.config(menu=menubar)
def _set_choices(menu, choices):
for label, command in choices.items():
if isinstance(command, dict):
# Submenu
submenu = tkinter.Menu(menu)
menu.add_cascade(label=label, menu=submenu)
_set_choices(submenu, command)
elif label == '-' and command == '-':
# Separator
menu.add_separator()
else:
# Simple choice
menu.add_command(label=label, command=command)
_set_choices(menubar, choices)
if __name__ == '__main__':
import sys
root = tkinter.Tk()
from collections import OrderedDict
set_menu(root, {
'Table of Contents': OrderedDict([
('Ecclesiastes', lambda: print('Ecclesiastes.py')),
('Ecclesiasticus', lambda: print('ecclesiaticus.exe')),
('-', '-'),
('Quit', lambda: sys.exit(0))
])
})
root.mainloop()
我希望通过执行“ecclesiastes.py”和“ecclesiasticus.exe”的几种不同方法来打开它,但不幸的是,错误消息实际上只告诉我我不知道我卡在什么上面而不是关于如何获取执行这两个文件所需的正确代码的线索。我将popen 放在.py 文件之前,将execfile 放在.exe 文件之前,但我认为这不是正确的方法。
我将 print 放在两个文件名之前,以便其他人可以在这里指出正确的命令,因为我认为 execfile 或 popen 不适合此代码。
【问题讨论】: