如何用tkinter组合创建一个类似simpledialog的窗口?

问题描述 投票:-2回答:1

simpledialog或fileialog是非常方便使用的小工具,我想做同样的事情。

  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?

有谁知道怎么处理吗 谢谢你的帮助

python tkinter combobox modal-dialog
1个回答
0
投票

如果函数被调用时,已经有一个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()
© www.soinside.com 2019 - 2024. All rights reserved.