自定义Python Tk菜单

2024-09-30 04:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图用add_命令构造函数中的参数分配函数时,该函数在菜单启动时执行。在

所以我的问题是:有没有办法放松“每个菜单项只有一个功能”?就像在一份完整的菜单里,会增加一个相当大的改变。在

#!/usr/bin/python2.7

import os
from Tkinter import *

def runCommand(app):
  os.system(app + " &")

def runBrowser():
  app = "firefox"
  runCommand(app)
def runTerminal():
  app = "terminology"
  runCommand(app)
def runFileManager():
  app = "xfe"
  runCommand(app)
def runEditor():
  app = "atom"
  runCommand(app)

root = Tk()
root.title("Root Menu")

menubar=Menu(root)
appsmenu=Menu(menubar)

menubar.add_cascade(label="Root Menu", menu=appsmenu)

appsmenu.add_command(label="Terminal", command=runTerminal)
appsmenu.add_command(label="Editor", command=runEditor)
appsmenu.add_command(label="File Manager", command=runFileManager)
appsmenu.add_command(label="Browser", command=runBrowser)
appsmenu.add_separator()
appsmenu.add_command(label="Close Menu", command=root.quit)

root.config(menu=menubar)

root.mainloop()

Tags: 函数importaddapposdef菜单root
1条回答
网友
1楼 · 发布于 2024-09-30 04:30:28

When I try to assign a function with an argument in add_command constructor that function gets executed on menu launch.

添加命令时,必须给它一个可调用。如果要传递参数,可以通过使用lambdafunctools.partial创建一个可调用的参数。在

例如,如果您想要一个可以被赋予运行命令的函数,可以这样做:

def run_command(command):
    print "running...", command

appsmenu.add_command(label="Terminal", command=lambda: run_command("Terminal"))

如果要在列表中创建菜单项,可以将变量的值作为默认参数提供给lambda

^{pr2}$

相关问题 更多 >

    热门问题