gpt4 book ai didi

python - 事件的关键代码是否与平台无关?

转载 作者:太空狗 更新时间:2023-10-30 02:44:51 25 4
gpt4 key购买 nike

我想为我的文本编辑器创建行号,但有点复杂:Tkinter adding line number to text widget

所以我决定创建一个行和列计数器,就像在 IDLE 中一样.为了实现这个目标,我决定监听 <Key>。在 tkinter.Text 上生成的事件小部件。我不知道事件对象有哪些属性,所以我决定看一下 Event 的源代码类(最好的教程之一 :D),我发现有 2 个主要属性对我的目标很有趣,即 keycodechar .

我的问题是,这是 keycodes 吗?平台独立者?由于对 keycodes 的错误解释,我希望我的文本编辑器可以在所有平台上运行而不会出现未定义的行为。 .

这是我想做的一个简单实用的功能示例:

from tkinter import *

lines = 1
columns = 0

ARROWS = (8320768, 8124162, 8255233, 8189699)

def on_key_pressed(event=None):
global columns, lines

if event.keycode == 3342463: # return
if columns > 0 and lines > 0:
columns -= 1
if columns < 0: # decrease lines if columns < 0
columns = 0
lines -= 1
if columns == 0 and lines > 1:
lines -= 1

elif event.keycode == 2359309: # newline
columns = 0
lines += 1
else:
if event.keycode not in (ARROWS) and event.char != '':
columns += 1

print("Lines =", lines)
print("Columns =", columns, '\n\n')
print(event.keycode, ' = ', repr(event.char))

root = Tk()

text = Text(root)

text.pack(fill='both', expand=1)
text.bind('<Key>', on_key_pressed)

root.mainloop()

这种方法有什么问题(在回答了我的第一个问题之后)?

最佳答案

在我的 win7 罗技键盘上,箭头键码是 37、38、39 和 40,repr '',return 是 13,repr '\r'。这些键码与您显示的或 this page 的声明不匹配.

但是,同一页面建议使用 event.keysym 或 event.keysym_num。它没有指出的是,非 unicode 字符键的数字,如 Shift、Up、F1 等,在“专用区域”中刚好低于 2**16 (65536)。 ascii 字符的数字是它们的 ascii 代码,等于它们的 unicode 序号。我怀疑所有 BMP unicode 字符的编号都是它们的 unicode 序号(tk 仅对 BMP 进行编码)。

我能看到的键码的唯一用途是区分数字小键盘键和其他地方的相同键。

关于python - <Key> 事件的关键代码是否与平台无关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27513183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com