如何删除 tkinter 菜单分隔符
how to delete a tkinter menu separator
我正在做一个项目,如果打开一个模式,它会显示额外的一批选项,我想将它们与其他选项分开,所以我使用了 -:
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)
如果有人可以帮助请帮助。
也希望你们在这场持续的大流行期间都安全。
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()
您可以像删除菜单上的任何其他内容一样删除分隔符 - 将分隔符的索引传递给 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
我正在做一个项目,如果打开一个模式,它会显示额外的一批选项,我想将它们与其他选项分开,所以我使用了 -:
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)
如果有人可以帮助请帮助。 也希望你们在这场持续的大流行期间都安全。
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()
您可以像删除菜单上的任何其他内容一样删除分隔符 - 将分隔符的索引传递给 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