【问题标题】:How do you create hotkeys like Ctrl+s with tkinter?如何使用 tkinter 创建像 Ctrl+s 这样的热键?
【发布时间】:2020-06-12 16:45:38
【问题描述】:

我正在尝试创建一个文本编辑器,我需要 Ctrl+s、Ctrl+shift+s 和 Ctrl+o 热键来完成其最终更新

我尝试使用 pynput,但它阻止了 tkinter 主循环

你能帮忙吗?

【问题讨论】:

标签: python tkinter


【解决方案1】:
from tkinter import *
Master = Tk()
def putcommandhere(event):
           print ('hello')

Master.bind('<key>', putcommandhere)

【讨论】:

  • 你可能不想绑定到&lt;Key&gt;,因为每次按键都会触发。一个更好的例子是展示如何专门绑定到 control-s。
  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
  • 虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,正如 β.εηοιτ.βε 所提到的,并且可能会导致在更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案以添加解释并说明适用的限制和假设。 From Review
  • 这确实有效,但即使我不按键也会在启动时触发
【解决方案2】:

TKinter 中没有针对 ctrl+s 之类的热键绑定,但您可以通过两个绑定和一点状态管理将任何热键添加到任何窗口。

from tkinter import *
Master = Tk()
ctrl_pressed = False
def master_key_pressed(event):
  # ctrl key pressed
  if event.keycode == 17:
    ctrl_pressed = True
  # 'ctrl+s' pressed
  elif event.keycode == 83 and ctrl_pressed:
    pass
def master_key_released(event):
  # ctrl key released
  if event.keycode == 17:
    ctrl_pressed = False
Master.bind('<Key>', master_key_pressed)
Master.bind('<KeyReleased>', master_key_released)

有一个partially complete list 的键名。

【讨论】:

    【解决方案3】:

    复制并运行!它正在工作! Python 3.10

    import tkinter as tk
    from tkinter import messagebox
    
    window = tk.Tk()
    
    def save_current_file(event=False):
        messagebox.showinfo(message='File saved! (fake)')
    
    # hotkey to save current file
    window.bind('<Control-s>', save_current_file)
    
    window.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2012-04-12
      相关资源
      最近更新 更多