1 回答

TA貢獻1813條經驗 獲得超2個贊
研究代碼后,我發現在條目中插入文本后,index sel.first會調用該方法。但是沒有選擇,因此會出現錯誤“選擇不在小部件中。!框架。!定制”。我不知道這是如何在常規中處理的Entry,但您可以捕獲此錯誤:
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
try:
return self.tk.call(cmd)
except TclError as e:
if args[0] == 'index' and args[1] == 'sel.first':
pass
else:
raise TclError(str(e))
否則,您可以使用完全不同的方法來更改插入文本的大小寫:對條目的文本變量使用跟蹤。
class CustomEntry(Entry):
def __init__(self, *args, **kwargs):
Entry.__init__(self, *args, **kwargs)
self._var = StringVar(self)
self.configure(textvariable=self._var)
self._var.trace_add('write', self._uppercase)
def _uppercase(self, *args):
self._var.set(self._var.get().upper())
使用,每次更改內容時都會調用self._var.trace_add('write', self._uppercase)該方法。_uppercase()StringVar
添加回答
舉報