我正在制作一个项目,如果打开了一个模式,那么它将显示额外的一批选项,我想与其余选项分开,所以我使用了-:
add_separator()
python tkinter的功能。但是问题在于,由于该菜单仅在打开该模式时才会显示,因此我无法直接将这些内容添加到其中。
因此,我有一个在菜单打开时称为后命令的函数。这就是我渲染东西的功能。因此,如果我一次又一次打开菜单,分隔符会堆叠在顶部,并且不会被删除。
我已经能够弄清楚如何删除菜单的其他组件,但是不能删除。 我也有一个想法,我在初始化菜单时添加了分隔符,但是在那种情况下,即使关闭了模式,菜单末尾也会显示分隔符。
编辑: 只是为了告知,选择索引的问题在于选项的数量有时会不同。由于我正在做的是一个记笔记程序,所以这是我仅存储两支过去使用过的笔的笔历史记录的部分。
也总是推荐两支笔。这样一来,有时会有3种选择笔,有时有4种选择笔。
因此,如果我考虑根据4个项目编制的索引,则只有3个项目时会出现错误。
但是,如果我根据3个项目考虑它,那么当有4个选项时看起来并不好。 这是用于渲染笔历史记录的代码。这里有些事情还不清楚,因为没有在此处提交整个代码-:
def show_pen_history() :
global pen_history, save_pen_history, pen_history_labels, pen_history_cascade
for j in pen_history_labels :
m1.delete(j)
try :
m1.delete(pen_history_cascade)
except :
pass
pen_history_labels.clear()
if save_pen_history :
k = 0
for i in list(pen_history.keys()) :
pen_definition = i + ' || size: ' + str(pen_history[i]['size']) + '| color: ' + pen_history[i]['color'] + '|'
if pen_history[i]['size'] == pen_size and pen_history[i]['color'] == pen_color :
pen_definition = pen_definition + '(currently selected)'
elif pen_history[i]['type'] == 'recommended' :
pen_definition = pen_definition + ' (recommended)'
pen_history_labels.append(pen_definition)
k += 1
pen_history_cascade = 'Pen History'
m1.add_cascade(label = 'Pen History')
if len(pen_history) > 1 :
m1.add_command(label = pen_history_labels[0], command = lambda : set_pen(0))
m1.add_command(label = pen_history_labels[1], command = lambda : set_pen(1))
if len(pen_history) > 2 :
m1.add_command(label = pen_history_labels[2], command = lambda : set_pen(2))
if len(pen_history) > 3 :
m1.add_command(label = pen_history_labels[3], command = lambda : set_pen(3))
return
我也要在菜单部分执行此操作-:
m1 = tkinter.Menu(menu, tearoff = 0, postcommand = show_pen_history)
如果有人可以帮助请帮助。 也希望在这场持续的大流行之时大家都平安无事。
答案 0 :(得分:1)
Menu
有一个名为delete
的属性,您只需要向其传递一个索引参数即可。
import tkinter as tk
def remove_the_sep():
sub_menu_bar.delete(1)
app = tk.Tk()
app.geometry('100x100')
menubar = tk.Menu(app, tearoff=False)
sub_menu_bar = tk.Menu(menubar, tearoff=False)
sub_menu_bar.add_command(label="Option1")
sub_menu_bar.add_separator()
sub_menu_bar.add_command(label="Option2")
menubar.add_cascade(menu=sub_menu_bar, label="menu")
app.config(menu=menubar)
tk.Button(app, text="Remove", command=remove_the_sep).pack()
app.mainloop()
答案 1 :(得分:1)
您可以使用删除菜单上其他内容的方式删除分隔符-将分隔符的索引传递给delete
方法。
例如,这将显示一个菜单,其中两个项目之间用分隔符分隔:
exampleMenu = tk.Menu(menubar)
exampleMenu.add_command(label="foo")
exampleMenu.add_separator()
exampleMenu.add_command(label="bar")
exampleMenu.add_command(label="baz")
这将删除分隔符:
exampleMenu.delete(1)
如果您不知道分隔符的索引,则可以使用type
方法获取每个索引的类型。您可以使用.index('end')
来获取最后一个项目的数字索引,以迭代这些项目。
例如,这将删除找到的第一个分隔符:
end = int(exampleMenu.index("end"))
for index in range(end):
if exampleMenu.type(index) == "separator":
exampleMenu.delete(index)
break