【问题标题】:Tkinter's OptionMenu callback doesn't work if the list is changed如果列表更改,Tkinter 的 OptionMenu 回调将不起作用
【发布时间】:2019-01-01 23:54:34
【问题描述】:

每当我更改 OptionMenu 值时,回调都会顺利运行,但我的代码需要在按下按钮时更新列表(用于 OptionMenu)。 当我查看它时,我能找到的唯一答案是完全擦除 OptionMenu,然后通过 .add_command 方法插入每个新值。 简化代码如下:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

# list_of_files = [] is previously defined 


def Change_selection_OptionMenu(event):
    # Do some changes in the page

var = tk.StringVar(root)
style_optionMenu = ttk.Style()
style_optionMenu.configure('style_option.TMenubutton', background = mycolor, foreground = "white")
option_files = ttk.OptionMenu(root,var,list_of_files[0],*list_of_files, style = 'style_option.TMenubutton', command = Change_selection_OptionMenu )
option_files.config(width = 20)
option_files.grid(row=0,column=0)


tk.Button(master = root, text = "Button", commnad = lambda: button_sabe()).grid()

def button_save():

    #Among other things
    # ...

    var.set('')
    option_files['menu'].delete(0, 'end')

    for choice in list_of_files:
        option_files['menu'].add_command(label=choice,command = tk._setit(var, choice))


root.deiconify()

更改值列表后,回调不再运行。我想问题出在我用于新类型选择的“命令”中,但我不知道如何处理它,只需更新列表,同时在选择选项时仍执行回调。 任何人都可以帮忙吗? 非常感谢!

【问题讨论】:

    标签: python tkinter callback optionmenu


    【解决方案1】:

    tk._setit 接受三个参数:变量、值和选择时应执行的命令。所以你需要添加第三个参数:

    option_files['menu'].add_command(label=choice,command = tk._setit(var, choice, Change_selection_OptionMenu))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 2019-07-04
      • 2019-03-13
      • 1970-01-01
      相关资源
      最近更新 更多