Python 是否可以在Tkinter下拉菜单中输入用户文本?如果是,怎么做?

Python 是否可以在Tkinter下拉菜单中输入用户文本?如果是,怎么做?,python,tkinter,tkinter-entry,Python,Tkinter,Tkinter Entry,这就是我尝试过的: win = Tk() menubar = Menu(win) dropDown = Menu(menubar) dropDown.add_command(label = "Do something", command = ...) entry = Entry() dropDown.add(entry) menubar.add_cascade(label = "Drop Down", menu = dropDown) win.config(menu = menubar) w

这就是我尝试过的:

win = Tk()
menubar = Menu(win)
dropDown = Menu(menubar)
dropDown.add_command(label = "Do something", command = ...)

entry = Entry()
dropDown.add(entry)

menubar.add_cascade(label = "Drop Down", menu = dropDown)
win.config(menu = menubar)
win.update()
我查看了文档,似乎没有办法用一行来完成,比如
下拉菜单。添加条目(…)
,但我认为可能有一种解决方法,比如使用几何体管理器中的一个将条目以某种方式放置在菜单中


我正在使用Python3.6(但我没有标记它,因为我将从Python标记中获得1000个mod,他们对回答我的问题不感兴趣,并且无理由投票关闭)

不,没有办法使用标准菜单来拥有一个接受用户输入的菜单。这根本不是菜单的设计原理


如果需要用户键入字符串,则需要使用对话框

这是一个简单的程序,您可以单击菜单按钮提示用户输入。然后用这个输入做点什么。在这种情况下,打印到控制台

我们需要编写一个函数,使用可以从Tkinter导入的
simpledialog
中的
askstring()
。然后获取用户输入的字符串的结果,并对其进行处理

import tkinter as tk
from tkinter import simpledialog


win = tk.Tk()
win.geometry("100x50")

def take_user_input_for_something():
    user_input = simpledialog.askstring("Pop up for user input!", "What do you want to ask the user to input here?")
    if user_input != "":
        print(user_input)

menubar = tk.Menu(win)
dropDown = tk.Menu(menubar, tearoff = 0)
dropDown.add_command(label = "Do something", command = take_user_input_for_something)

# this entry field is not really needed her.
# however I noticed you did not define this widget correctly
# so I put this in to give you an example.
my_entry = tk.Entry(win)
my_entry.pack()

menubar.add_cascade(label = "Drop Down", menu = dropDown)
win.config(menu = menubar)

win.mainloop()

你可以做我做的事。创建新菜单项,然后使用一个函数删除并重新创建菜单。这样,您可以添加或删除菜单项。我有一个笔记记录程序,可以通过菜单添加或删除新的笔记集。我有一个名为
new
的菜单命令,它链接到一个运行
simpledialog.askstring()
的函数。我从这个
askstring()
中获取用户输入,为新文件名创建变量,然后函数将该文件装箱。您可以使用相同的概念在GUI中执行多种任务,包括向菜单添加新项。您还需要另一个功能来更新菜单。@问题的具体内容是“文本输入”,这很有趣,因为Tkinter菜单至少在美学上与旧的windows下拉菜单相同,而且我很确定它们有文本输入(例如,当选择特定的字体大小时)。这种相似性纯粹是视觉上的吗?@RegulationHeadgear如果我没有弄错的话,Tkinter使用windows来定义小部件的主题。但据我所知,tkinter与旧windows菜单的相似之处只是视觉上的。@Mike SMT:在OSX和windows上,tkinter使用平台提供的本机菜单小部件。它们是真正的windows或osx菜单。@BryanOakley感谢您的澄清。我没有意识到它们是来自操作系统的实际菜单,而不仅仅是主题。谢谢你让我加入simpledialog,我不知道这一点。我敢打赌,如果我(或其他人)有麻烦的话,可以将其中一个对话框打包,使其在单击某个菜单时始终显示在该菜单内。不过,我并不擅长使用几何体管理器,所以可能不是我。当您单击菜单按钮时,可以使用
Toplevel()
创建一个自定义弹出窗口,该窗口可以很小,也可以是一个简单的输入字段。我相信
Toplevel()
可以帮助你解决这一问题。如果我能更详细地了解你到底想做什么,我可能会给你一些可行的想法。你最初的回答解决了我的问题。我的程序有一个“另存为”的功能,为了获得名称输入,我可以让菜单调用一个顶层,其中包含一个条目和一个按钮,但是(根据过去的经验),这对于我可能只使用input()的东西来说是一个巨大的痛苦,所以我想知道是否有更有效的方法。你的回答提供了这一点。我只是以我这样的方式问这个问题,因为我认为它更有可能得到回答。