【问题标题】:how to trigger a function on tab change from tkinter notebook?如何从 tkinter 笔记本触发选项卡更改功能?
【发布时间】:2020-05-27 23:41:01
【问题描述】:

有谁知道在 tkinter 笔记本中选择不同的选项卡后如何触发功能?

这就是我要完成的任务。

假设我有两个选项卡,tab1 和 tab2:

if tab1 is selected:
    canvas3.unbind_all() 
    canvas2.bind_all('<MouseWheel>', lambda event: canvas2.yview_scroll(int(-1 * (event.delta / 120)),"units"))

elif tab 2 is selected:
    canvas2.unbind_all()
    canvas3.bind_all('<MouseWheel>', lambda event: canvas3.yview_scroll(int(-1 * (event.delta / 120)), "units"))

【问题讨论】:

  • 可以绑定&lt;&lt;NotebookTabChanged&gt;&gt;事件。
  • 你能解释一下你会怎么做吗?
  • @IgnacioBares '&lt;MouseWheel&gt;' 事件可根据鼠标焦点中的小部件进行选择。相关binding mousewheel to scrollbar

标签: python python-3.x tkinter tkinter-layout


【解决方案1】:

您可以在笔记本上绑定&lt;&lt;NotebookTabChanged&gt;&gt;事件:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

nb = ttk.Notebook(root, width=800, height=600)
nb.pack()

frame1 = ttk.Frame(nb)
frame2 = ttk.Frame(nb)

nb.add(frame1, text='Tab1')
nb.add(frame2, text='Tab2')

def on_tab_change(event):
  tab = event.widget.tab('current')['text']
  if tab == 'Tab1':
    #canvas3.unbind_all() 
    #canvas2.bind_all('<MouseWheel>', lambda event: canvas2.yview_scroll(int(-1 * (event.delta / 120)),"units"))
  elif tab == 'Tab2':
    #canvas2.unbind_all()
    #canvas3.bind_all('<MouseWheel>', lambda event: canvas3.yview_scroll(int(-1 * (event.delta / 120)), "units"))

nb.bind('<<NotebookTabChanged>>', on_tab_change)

root.mainloop()

【讨论】:

  • 这很完美!只需要删除 unbind_all() 部分,它就可以正常工作:)
猜你喜欢
  • 2023-04-09
  • 2018-04-05
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 2016-07-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多