我正在尝试创建一个自定义 Tkinter Entry widget
,它将在将字符插入小部件之前将小写字符转换为大写字符。我知道有一些解决方案可以将按键释放事件绑定到一个小部件,该小部件具有获取小部件文本然后转换为大写并重新插入文本的功能。但是这些解决方案在转换发生之前显示小写字符,我不想这样做。
我正在尝试使用基于 Bryan Oakley 共享的代码的自定义 Entry 小部件 - Tkinter adding line number to text widget
此代码非常适合自定义Text widget
,我已在其他应用程序中使用过它。
现在我正在尝试使用相同的方法来创建自定义 Entry 小部件。以下是包含自定义文本小部件和自定义输入小部件的示例代码:
from tkinter import *
class CustomText(Text):
def __init__(self, *args, **kwargs):
Text.__init__(self, *args, **kwargs)
self._orig = self._w + "_orig"
self.tk.call("rename", self._w, self._orig)
self.tk.createcommand(self._w, self._proxy)
def _proxy(self, *args):
if args[0] == "insert" and args[1] == "insert":
args =('insert', 'insert', args[2].upper())
cmd = (self._orig,) + args
result = self.tk.call(cmd)
return result
class CustomEntry(Entry):
def __init__(self, *args, **kwargs):
Entry.__init__(self, *args, **kwargs)
self._orig = self._w + "_orig"
self.tk.call("rename", self._w, self._orig)
self.tk.createcommand(self._w, self._proxy)
def _proxy(self, *args):
if args[0] == "insert" and args[1] == "insert":
args =('insert', 'insert', args[2].upper())
cmd = (self._orig,) + args
result = self.tk.call(cmd)
return result
def get_text():
print("TEXT widget text = ", mytext.get("1.0", "end"))
print("ENTRY widget text = " ,entryvar.get())
root = Tk()
entryvar = StringVar()
这些解决方案适用于CustomText小部件。如您所见,字符在插入之前进行了转换,结果就好像用户是在按下 shift 键的情况下输入字符一样。
关于为什么会发生这种情况的任何想法?
慕姐8265434
相关分类