答案 0 :(得分:3)
您可bind()
事件<Button-3>
(右键)到notebook
,其功能将关闭所选的tab
。
nb = ttk.Notebook(root)
nb.bind('<Button-3>', on_click)
问题是如何识别点击的tab
,因为tkinter仅发送x
,y
。
Tcl/Tk
具有将indentity tab x y
,x
转换为y
的函数tab index
。但是tkinter
没有它。你必须调用Tcl
命令:
clicked_tab = nb.tk.call(nb._w, "identify", "tab", x, y)
现在您可以使用此索引关闭标签。
(您可以在indentify
文件中看到类似的命令ttk.py
简单的工作示例
import tkinter as tk
from tkinter import ttk
# --- functions ---
def on_click(event):
print('widget:', event.widget)
print('x:', event.x)
print('y:', event.y)
#selected = nb.identify(event.x, event.y)
#print('selected:', selected) # it's not usefull
clicked_tab = nb.tk.call(nb._w, "identify", "tab", event.x, event.y)
print('clicked tab:', clicked_tab)
active_tab = nb.index(nb.select())
print(' active tab:', active_tab)
if clicked_tab == active_tab:
nb.forget(clicked_tab)
# --- main ---
root = tk.Tk()
# create notebook
nb = ttk.Notebook(root)
nb.pack(fill='both')
# bind function to notebook
nb.bind('<Button-3>', on_click)
# add some tabs
for char in "ABCDEF":
nb.add(tk.Label(nb, text=(char*15)), text=char*3)
root.mainloop()
如果您删除if clicked_tab == active_tab:
,那么您可以关闭每个tab
,而不仅仅是有效。