【问题标题】:Tkinter unable to clear OptionMenu choice with .destroyTkinter 无法使用 .destroy 清除 OptionMenu 选项
【发布时间】:2022-08-04 21:51:47
【问题描述】:

我正在尝试使用 customtkinter OptionMenu 中的选定选项显示标签。我无法显示当前选择到标签中的内容。我尝试了两种不同的方法并得到了 2 个不同的错误。

产生TypeError 的第一个错误:on_size_selected() 采用0 个位置参数,但给出了1 个:

import customtkinter
from tkinter import *

customtkinter.set_appearance_mode(\"System\")  
customtkinter.set_default_color_theme(\"blue\")
root = customtkinter.CTk()
size_label = customtkinter.CTkLabel()

size_options = [\"Random\", \"Tiny\", \"Small\", \"Medium\", \"Large\", \"Huge\", \"Gargantuan\"]
def on_size_selected():
    size_label.destroy() #Issue is here 
    size_label = customtkinter.CTkLabel(root,text=clicked.get())
    size_label.pack()


clicked= customtkinter.StringVar()
size_menu = customtkinter.CTkOptionMenu(root, variable=clicked, values=size_options, command=on_size_selected)
size_menu.pack()

root.mainloop()

第二个错误是 str 对象没有属性破坏(我也尝试过 clear 并说同样的事情,但使用 clear ):

import customtkinter
from tkinter import *

customtkinter.set_appearance_mode(\"System\")  
customtkinter.set_default_color_theme(\"blue\")
root = customtkinter.CTk()

size_options = [\"Random\", \"Tiny\", \"Small\", \"Medium\", \"Large\", \"Huge\", \"Gargantuan\"]
def on_size_selected(size_label):
    size_label.destroy() #Issue is here 
    size_label = customtkinter.CTkLabel(root,text=clicked.get())
    size_label.pack()


clicked= customtkinter.StringVar()
size_menu = customtkinter.CTkOptionMenu(root, variable=clicked, values=size_options, command=on_size_selected)
size_menu.pack()

root.mainloop()

    标签: python tkinter label optionmenu customtkinter


    【解决方案1】:

    Read the CustomTkinter docs。 OptionMenu 会将您选择的字符串发送到命令,并且字符串没有销毁方法。这应该有效:

    def on_size_selected(choice):
        new_values = [x for x in size_options if x != choice]
        size_menu.configure(values=new_values)
        size_label = customtkinter.CTkLabel(root,text=choice)
        size_label.pack()
    

    请注意,您不需要 stringvar。

    编辑请注意,CustomTkinter 模拟 tkinter 小部件,在这种情况下,它是 tkinter 小部件的正常行为,如 cmets 中所述的@martineau。因此,您也可以考虑阅读 tkinter 文档。

    【讨论】:

    • 实际上,这也是常规的 OptionMenu 小部件所做的。
    • @martineau 感谢您指出这一点。当然,我确实注意到了对称性,但错过了tk.Optionmenu 还提供了解析所选值的command 的选项。
    猜你喜欢
    • 2019-07-04
    • 2013-10-08
    • 2021-04-29
    • 2016-05-10
    • 2018-10-10
    • 2018-10-14
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多