<p>因此,这里有一个更为奇特的选项(我不知道您是否需要类似的功能,但它也能满足您的要求,只是不必按下按钮将字符更改为小写,在这种情况下,它会在用户键入时执行此操作,请尝试):</p>
<pre class="lang-py prettyprint-override"><code>from tkinter import Tk, Text
def lower_input(event):
if not event.char or r'\x' in repr(event.char):
return
text.delete('insert-1c')
text.insert('insert', event.char.lower())
root = Tk()
text = Text(root)
text.pack()
text.bind('<Key>', lambda e: root.after(1, lower_input, e))
root.mainloop()
</code></pre>
<p>基本上,它只是将<code>"<Key>"</code>事件绑定到文本小部件,这意味着当按下任何键时(焦点在文本小部件上),将触发事件,然后调用给定的函数。此外<code>.bind</code>还传递一个事件参数,以便即使不使用也应处理该参数,但在这里,它用于检测字符或在按下的键没有字符时停止函数(例如,“Caps Lock”或“Backspace”(实际上有字节类型thingy,这就是为什么还有<code>r"\x" in repr(event.char)</code>的其他比较)。然后,它只是删除刚写的字符,并在其位置放置一个小写的新字符。之所以使用<code>root.after</code>,是因为在向文本小部件键入字符之前调用了事件,这意味着使用了不正确的索引,因此会有一个微小的延迟(1毫秒),以便字符可以出现在屏幕上,然后进行索引</p>
<p>编辑:也可以向if语句添加<code>or event.char.islower()</code>(如果不起作用,也可以尝试<code>or not event.char.isupper()</code>),以稍微提高性能,因为如果字符已经是小写的,它将不会经过替换过程</p>
<p>编辑2:根据PEP8,您应该使用<code>snake_case</code>来命名变量和函数,而不是<code>camelCase</code></p>
<p>有用的资料/文件:</p>
<ul>
<li><a href="https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/text-index.html" rel="nofollow noreferrer">this one specifically about indexes but contains a lot of other very useful stuff too</a></li>
<li><a href="https://www.tutorialspoint.com/python/tk_text.htm" rel="nofollow noreferrer">simple docs I like to use</a></li>
</ul>