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

时间:2018-03-12 15:45:51

标签: 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)
win.update()

我查看了文档,似乎没有办法用dropDown.add_entry(...)之类的单行来完成,但我认为可能有一种解决方法,比如使用几何管理器来放置以某种方式进入菜单。

我正在使用Python 3.6(但我没有标记它,因为我会从Python标签中获得一千个mod,他们没有兴趣回答我的问题投票无理由关闭)

2 个答案:

答案 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()