【发布时间】:2017-01-04 17:59:17
【问题描述】:
我想使用 Tkinter 创建一个条目,用户可以在其中键入其电话号码,文本会动态更改,以便在完成后变成 +34 1234567890。
在我的代码中,用于设置光标位置的函数.icursor(n),起初不能正常工作,但后来超过了前缀,它确实可以。
这是我的代码 sn-p(它属于更大的一个)。
from Tkinter import *
def TelephoneCheck(self,Vari):
Plain = Vari.get()
Plain = list(Plain)
Plain_flat = []
for element in Plain:
try:
check = int(element)
Plain_flat.append(element)
except: pass
if len(Plain_flat) > 2:
Plain_flat.insert(2,' ')
Plain = ''.join(Plain_flat)
Plain = '+'+Plain
self.istn.set(Plain)
self.InsertTelephoneNumber.icursor(len(Plain))
def CreateInsertTelephoneNumber(self,X,Y,color='white'):
self.istn = StringVar()
self.istn.trace('w', lambda name, index, mode, istn=self.istn: self.TelephoneCheck(istn))
self.InsertTelephoneNumber = Entry(Body,textvariable=self.istn)
self.InsertTelephoneNumber.config(bg=color)
self.InsertTelephoneNumber.place(height=20,width=230,y=Y+27,x=X+245)
def LabelBody(self,X,Y):
TelephoneText = Label(Body,text='Telephone Number *')
TelephoneText.place(y=Y+4,x=X+243)
self.CreateInsertTelephoneNumber(X,Y)
如您所见,理论上,每次用户添加数字时,都应将位置设置在字符串的末尾。
我不明白为什么它只在前缀之后而不是在输入第一个数字时才像魅力一样起作用(结果为+(Cursor here)3而不是+3(Cursor here))。
如果需要更多代码,我会更新帖子。
感谢您的宝贵时间和帮助!
【问题讨论】:
-
“不能正常工作”没有意义。你得到了什么,没有得到什么?
-
@ParvizKarimli .icursor(position) 应该将光标移动到指定位置。可悲的是,键入第一个字符时不会。所以我会说这是一种“无法正常工作”的行为......
-
你做了什么来调试这个?您是否打印了变量的值以验证您的假设?
-
@BryanOakley 我做到了。每次将字符添加到字符串时,我都会打印整个列表及其长度。我什至在 if 块和 try-except 中添加了一个 print 以查看是否有问题,但一切似乎都正常。
-
@ParvizKarimli 你有。感谢您的建议。 pastebin.com/CCRsfuSm
标签: python python-2.7 function tkinter cursor