这就是我的尝试:
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()
我查看了文档,似乎没有办法用dropDown.add_entry(...)
之类的单行来完成,但我认为可能有一种解决方法,比如使用几何管理器来放置以某种方式进入菜单。
我正在使用Python 3.6(但我没有标记它,因为我会从Python标签中获得一千个mod,他们没有兴趣回答我的问题投票无理由关闭)
答案 0 :(得分:1)
不,使用标准菜单无法使用接受用户输入的菜单。这根本不是菜单的设计方式。
如果您需要用户键入字符串,则需要使用对话框。
答案 1 :(得分:0)
这是一个简单的程序,您可以单击菜单按钮提示用户输入。然后用那个输入做一些事情。在这种情况下,打印到控制台。
我们需要编写一个使用askstring()
simpledialog
的函数,您可以从Tkinter导入。然后获取用户输入的字符串的结果并使用它做一些事情。
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()