如何使用tkinter的组合创建一个简单的类似对话框的窗口?



simpledialog或filedialog是非常方便使用的小部件。 我也想做:

  1. 像这些简单对话框一样在屏幕上弹出的模态窗口
  2. 内部组合框
  3. 当我在组合中选择一个值时,无需按钮即可返回此值

像这样:

def askComboValue():
root = Tk()   #how to pops up this window?
label = ttk.Label(root, text = "select your value")
label.pack()
box_value = ''
combo = ttk.Combobox(root, textvariable=box_value, values=['bla', 'bli', 'blo'])
combo.current(0)
combo.pack()
combo.bind("<<ComboboxSelected>>", returnValue) #how to catch this value?
root.grab_set_global()  #is it the right way to make it modal?
root.mainloop()
return box_value #how to return this value?

有谁知道如何处理它? 感谢您的帮助

如果在已经有 tkinter 窗口时调用该函数,那么最好使用Toplevel()而不是Tk()。 此外,box_value应该是StringVar()的实例。 也使用grab_set()代替grab_set_global()

下面是一个基于您的代码的示例:

import tkinter as tk
from tkinter import ttk
def askComboValue(*values):
top = tk.Toplevel() # use Toplevel() instead of Tk()
tk.Label(top, text='Select your value').pack()
box_value = tk.StringVar()
combo = ttk.Combobox(top, textvariable=box_value, values=values)
combo.pack()
combo.bind('<<ComboboxSelected>>', lambda _: top.destroy())
top.grab_set()
top.wait_window(top)  # wait for itself destroyed, so like a modal dialog
return box_value.get()
def test():
result = askComboValue('bla', 'bli', 'blo')
print(result)
root = tk.Tk()
tk.Button(root, text='Test', command=test).pack()
root.mainloop()

最新更新