- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我希望我的 tkinter 应用程序将列表框的选定项目从被调用窗口(MyDialog 类)返回到调用窗口(Example 类)。如果我不使用 wait_window(),将返回一个空列表。使用 wait_window() 会导致错误消息。在我看来 wait_window() 阻止了 curselection() 方法。需要更改什么才能获得正确的返回?
以下示例是 this answer 的修改版本.
import tkinter as tk
class MyDialog(object):
def __init__(self, parent):
self.toplevel = tk.Toplevel(parent)
choices = ("one", "two","three")
names = tk.StringVar(value=choices)
label = tk.Label(self.toplevel, text="Pick something:")
self.listbox = tk.Listbox(self.toplevel, listvariable=names, height=3,
selectmode="single", exportselection=0)
button = tk.Button(self.toplevel, text="OK", command=self.toplevel.destroy)
label.pack(side="top", fill="x")
self.listbox.pack(side="top", fill="x")
button.pack()
def show(self):
self.toplevel.wait_window()
value = self.listbox.curselection()
return value
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.button = tk.Button(self, text="Click me!", command=self.on_click)
self.label = tk.Label(self, width=80)
self.label.pack(side="top", fill="x")
self.button.pack(pady=20)
def on_click(self):
result = MyDialog(self).show()
self.label.configure(text="your result: %s" % result)
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
最佳答案
wait_window
等待寡妇被销毁。由于它已被销毁,您无法从小部件中提取任何信息。
您必须设置绑定(bind),以便在数据发生变化时将数据保存到变量中,以便您可以在小部件被销毁后获取它。
关于python - 在 tkinter 中使用 wait_window() 时如何返回列表框的选定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37219191/
似乎调用此方法的对象等待作为参数传递的窗口在继续其自己的循环之前被销毁 ... 从Misc类的文档字符串中,我们可以观察到: def wait_window(self, window=None):
我有一个 Python 中的 Tkinter 应用程序,我正在尝试在其中使用自定义对话框。所以我有一个主 App 类和一个扩展 Toplevel 的 Dialog 类。在 App 类的主体内,需要弹出
我希望我的 tkinter 应用程序将列表框的选定项目从被调用窗口(MyDialog 类)返回到调用窗口(Example 类)。如果我不使用 wait_window(),将返回一个空列表。使用 wai
我尝试使用 Python Tkinter 创建模式对话框。我发现使用和不使用 wait_window() 之间没有区别。 import tkinter as tk def button_click()
我是一名优秀的程序员,十分优秀!