【发布时间】:2016-02-09 07:29:02
【问题描述】:
如何在标准 Python 中获得阻塞模式输入对话框?
我需要用户在代码继续之前输入一个值。
这是一些不工作的测试代码,但我的想法是我应该能够从脚本中的任何位置调用MyDialog,所以这只是一个简化的示例。
import tkinter
class MyDialog:
def __init__(self, prompt):
self.top = tkinter.Toplevel()
tkinter.Label(self.top, text=prompt).pack()
self.e = tkinter.Entry(self.top)
self.e.pack(padx=5)
tkinter.Button(self.top, text="OK", command=self.ok).pack(pady=5)
def ok(self):
self.top.destroy()
return self.e.get()
root = tkinter.Tk()
userName = MyDialog('Enter your name')
tkinter.Label(root, text="Hello {}".format(userName)).pack()
root.mainloop()
对话框不仅应该禁用主窗口,而且应该阻止调用它的任何代码。它应该能够将值传递回调用代码。
【问题讨论】:
-
@StevenSummers 该解决方案不提供代码阻塞。
-
您能否澄清一下哪些代码会被阻止,哪些值会被传回?比如,如果一个按钮打开了
MyDialog然后阻止按钮再次打开? -
在用户关闭对话框之前,不应执行行
tkinter.Label(root...,此时您将在userName中获得用户提供的值。 -
你不能在按钮点击事件中创建它吗?把它放在活动之外似乎很奇怪。
标签: python tkinter dialog modal-dialog user-input