【问题标题】:tkinter message box calling functiontkinter 消息框调用函数
【发布时间】:2018-07-03 06:18:06
【问题描述】:

我想在我的消息框中显示标签的标题,该标题将显示为“您已选择项目”。我怎样才能做到这一点,就像保存和退出一样,也只使用一个功能?

from tkinter import*

import tkinter.messagebox

root = Tk()

def func(label):
      tkinter.messagebox.askquestion("Information", "you have selected: ", label )


mymenu = Menu(root)
root.config(menu = mymenu)

submenu = Menu(mymenu)

mymenu.add_cascade(label = "file", menu = submenu)
submenu.add_command(label ="project", command = func)
submenu.add_command(label = "save", command = func)
submenu.add_separator()
submenu.add_command(label ="exit", command = func)

root.mainloop()

【问题讨论】:

  • 将函数参数重命名为func(event),然后在askquesiton 部分中不要使用label,而是从像这样submenu.get(<getTheSelectedPartFrom event??>) 的子菜单中获取它,打印出参数event 以了解更多信息.
  • 对不起,这里没有event,所以你可以放心地忽略我上面的评论。
  • @rocksteady 我认为这是因为command 选项是多余的。存在的事件是<<MenuSelect>>,并在活动(即鼠标下)菜单项发生变化时触发。
  • 直觉上,我认为它可以提供类似submenu.get(submenu.selected_item())... 我应该在写评论之前阅读它。

标签: python tkinter messagebox


【解决方案1】:

您可以使用 lambda 函数(用于子菜单命令)和string formatting

from tkinter import *

import tkinter.messagebox

root = Tk()

def func(label):
    tkinter.messagebox.askquestion("Information", "you have selected: {}".format(label))


mymenu = Menu(root)
root.config(menu = mymenu)

submenu = Menu(mymenu)

mymenu.add_cascade(label="file", menu=submenu)
submenu.add_command(label="project", command=lambda: func("project"))
submenu.add_command(label= "save", command=lambda: func("save"))
submenu.add_separator()
submenu.add_command(label="exit", command=lambda: func("exit"))

root.mainloop()

lambda 函数用于将子菜单项对应的标签参数传递给func

对于消息框,语法为tkinter.messagebox.askquestion(<title>, <message>),因此您需要在消息中插入带有字符串格式的标签参数:"you have selected: {}".format(label){} 将替换为label 变量的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多