您可以bind()事件<Button-3>(右键),即可notebook使用功能,这将接近选择tab。
nb = ttk.Notebook(root)
nb.bind('<Button-3>', on_click)
Run Code Online (Sandbox Code Playgroud)
问题是如何识别点击,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)
Run Code Online (Sandbox Code Playgroud)
现在您可以使用此索引关闭选项卡。
(你可以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()
Run Code Online (Sandbox Code Playgroud)
如果您删除,if clicked_tab == active_tab:那么您可以关闭每个tab,而不仅仅是活动的。
| 归档时间: |
|
| 查看次数: |
2613 次 |
| 最近记录: |