簡體   English   中英

無法綁定 <Control-bracketleft> , <Control-bracketright> 在tkinter.ttk.Notebook(Python 3.5.1)

[英]Cannot bind <Control-bracketleft>, <Control-bracketright> in tkinter.ttk.Notebook (Python 3.5.1)

我想在tkinter.ttk.Notebook對象中為用戶提供多個用於制表符遍歷的鍵綁定。 我正在使用以下代碼:

self.notebook = ttk.Notebook(self)
self.notebook.enable_traversal()
self.notebook.bind('<Control-Key-Prior>', self.priorTab)
self.notebook.bind('<Control-Key-Next>', self.nextTab)
self.notebook.bind('<Control-bracketleft>', self.priorTab)
self.notebook.bind('<Control-bracketright>', self.nextTab)

enable_traversal()產生預期的行為,允許Control-Shift-Tab和Control-Tab導航。 和綁定也產生了所需的結果,允許Control-PageUp和Control-PageDown導航。

但是,第三種選擇失敗了。 我期望並允許通過Control- [和Control-]進行導航,但它們什么都不做。 我通過檢查相應的Tk手冊頁確認了鍵符號是正確的,並且鍵盤在Python解釋器中不會產生錯誤。

根據我的理解,tkinter對於綁定到同一回調的兩個事件不應該有任何問題。 我在某處犯了錯誤,還是支架鍵不受支持? 謝謝!

綁定可能沒有錯。 如果您綁定到筆記本本身,那么它必須具有焦點才能注冊綁定(選擇一個選項卡以獲得焦點)。 如果您希望綁定切換筆記本選項卡,無論焦點是什么,然后綁定到頂級窗口(在此示例根目錄中)

示例代碼:

import tkinter as tk
from tkinter import ttk

def change_tab(delta):
    print("triggered")
    tabs = note.tabs()
    note.select( tabs[(tabs.index(note.select()) + delta) % len(tabs)] )

root = tk.Tk()
root.minsize(250, 250)

note = ttk.Notebook(root, height = 200, width = 200)
note.pack()
#note.enable_traversal()

for i in range(1, 6):
    note.add(tk.Frame(note), text = "Tab #%d" % i)

# Note requires focus for bindings to work
# Change to root for bindings to work anywhere in the app
note.bind('<Control-[>', lambda e: change_tab(-1))
note.bind('<Control-]>', lambda e: change_tab(1))

root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM