我正在用python3.12.0 (on windows)编写一个tkinter应用程序,我想绑定the other "Enter"(它在键盘的Num-Lock部分),当我按下它时,发送我的消息. 我正在使用一个文本窗口小工具,我需要主回车的中断行. 我已经用下面的代码解决了我的问题,它可以在我的系统上运行;但我正在寻找更好的解决方案,我不知道这个功能是否在其他系统上运行,甚至不知道它是否在不同的操作系统上运行.

def foo(event=None):
if not (event.keysym=="Return" and event.state in [
    262144, # Caps Lock Off, Num Lock Off, Scroll Lock Off
    262146, # Caps Lock On , Num Lock Off, Scroll Lock Off
    262152, # Caps Lock Off, Num Lock On , Scroll Lock Off
    262154, # Caps Lock On , Num Lock On , Scroll Lock Off
    262176, # Caps Lock Off, Num Lock Off, Scroll Lock On
    262178, # Caps Lock On , Num Lock Off, Scroll Lock On
    262184, # Caps Lock Off, Num Lock On , Scroll Lock On
    262186, # Caps Lock On , Num Lock On , Scroll Lock On
    ]):
    return
# do the code

我的问题已经解决了.我只是想知道,有没有更好的方式来绑定另一位"Enter"?


编辑: 正如我一开始所说的:我只想使用第二个Enter按钮,我想我无法让人理解我的观点.

以下是我的代码:

import tkinter as tk
def foo(event=None):
    print(event) 
    print(event.state)
    # to bind only to other Enter, but not the main Enter:
    if event!=None and (not (event.keysym=="Return" and event.state in [
        262144, # Caps Lock Off, Num Lock Off, Scroll Lock Off
        262146, # Caps Lock On , Num Lock Off, Scroll Lock Off
        262152, # Caps Lock Off, Num Lock On , Scroll Lock Off
        262154, # Caps Lock On , Num Lock On , Scroll Lock Off
        262176, # Caps Lock Off, Num Lock Off, Scroll Lock On
        262178, # Caps Lock On , Num Lock Off, Scroll Lock On
        262184, # Caps Lock Off, Num Lock On , Scroll Lock On
        262186, # Caps Lock On , Num Lock On , Scroll Lock On
        ])):
        return
    print("Yey!")

root = tk.Tk()
text = tk.Text(root, width=60, height=8)
text.bind('<Key>', foo)
text.pack()
tk.Button(root, text='Send', command=foo).pack()
root.mainloop()

请核对一下其他人的答案.

推荐答案

试试这个:

def foo(event=None):
    if event and (not (event.keysym == "Return" and (event.state & 262144))):
        return
    print("Yey!")

但是,如果您同时按下键盘Enter和其他键,如shiftctrlalt或其他键,则仍会进行打印. 如果您希望在只按键盘Enter而不按任何其他键(除各种锁)时进行打印,请try 以下代码:

def foo(event=None):
    if event and (not (event.keysym == "Return" and (event.state & 524245) == 262144)):
        return
    print("Yey!")

就在最近,我发现了第三个 Select :try 使用Extended-Return的绑定:

def foo(event=None):
    print("Yey!")


root = tk.Tk()
text = tk.Text(root, width=60, height=8)
text.bind('<Extended-Return>', foo)
…

应该会给出与第一个示例相同的结果.

Python相关问答推荐

从webhook中的短代码(而不是电话号码)接收Twilio消息

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

难以在Manim中正确定位对象

删除最后一个pip安装的包

对于一个给定的数字,找出一个整数的最小和最大可能的和

如何从.cgi网站刮一张表到rame?

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

如何将多进程池声明为变量并将其导入到另一个Python文件

Pre—Commit MyPy无法禁用非错误消息

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

提取相关行的最快方法—pandas

计算分布的标准差

合并帧,但不按合并键排序

基于Scipy插值法的三次样条系数

如何在一组行中找到循环?

ModuleNotFoundError:Python中没有名为google的模块''

Django在一个不是ForeignKey的字段上加入'

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

如何通过特定导入在类中执行Python代码

用LAKEF划分实木地板AWS Wrangler