regex 限制tk小工具上的条目

nlejzf6q  于 2022-12-01  发布在  其他
关注(0)|答案(4)|浏览(145)

我很难找到一种方法来限制条目小工具的条目长度,我想限制它在20个字符,即当我点击一个序列或其他我想能够编辑它,但停留在20个字符的限制。为了或为了保持代码轻,我应该使用正则表达式,循环或检查一个事件的条目?
下面是我的代码:

import Tkinter
from Tkinter import *
import tkFileDialog

root = Tkinter.Tk()

edit1    =StringVar()
edit2    =StringVar()
s = StringVar()

s = "GATACACGCGCGCGTATATATTACGCGCGCGATACA"


lb01=Label(root,text="sequence1")
lb01v=Entry(root,textvariable=edit1,width=20)
lb01v.delete(0, END)
lb01v.insert(0, s[6:20])

lb01.grid(sticky=W,row=1,column=1)
lb01v.grid(row=1,column=2)

lb02=Label(root,text="sequence2")
lb02v=Entry(root,textvariable=edit2,width=20)
lb02v.delete(0, END)
lb02v.insert(0, s[0:6])

lb02.grid(sticky=W,row=2,column=1)
lb02v.grid(row=2,column=2)

root.mainloop()
isr3a4wc

isr3a4wc1#

好吧,我确实在一小段测试代码上尝试了trace变量,这正是我所要寻找的!!我喜欢你可以很容易地在Python中建立原型的事实;)

def main():
    pass

if __name__ == '__main__':
    main()

from Tkinter import *

def callback(sv):
    c = sv.get()[0:9]
    print "c=" , c
    sv.set(c)

root = Tk()
sv = StringVar()
sv.trace("w", lambda name, index, mode, sv=sv: callback(sv))
e = Entry(root, textvariable=sv)
e.pack()
root.mainloop()
42fyovps

42fyovps2#

我知道现在要回答这个问题已经太晚了,只是找到了一种更简单的方法来表示Wabara的回答。如果你需要多个输入限制,并且每个限制都有一个用户定义的长度限制,这将很有帮助。下面是一段在Python 3.6.5上运行的代码:

def main():
    pass

if __name__ == '__main__':
    main()

from tkinter import *

def limit_entry(str_var,length):
    def callback(str_var):
        c = str_var.get()[0:length]
        str_var.set(c)
    str_var.trace("w", lambda name, index, mode, str_var=str_var: callback(str_var))

root = Tk()

abc = StringVar()
xyz = StringVar()

limit_entry(abc,3)
limit_entry(xyz,5)

e1 = Entry(root, textvariable=abc)
e2 = Entry(root, textvariable=xyz)

e1.pack()
e2.pack()
root.mainloop()
vwhgwdsa

vwhgwdsa3#

最简单的解决方案是对变量进行跟踪。当跟踪触发时,检查值的长度,然后删除超出限制的任何字符。
如果您不喜欢这个解决方案,Tkinter也有内置的工具来对入口小部件进行输入验证。

nwsw7zdq

nwsw7zdq4#

我将从制作一个字母表开始测量。字母表是一个字符串,有26个字母,这意味着它太长了,我们使用。我们只需要20个字母,所以我们的输出应该是“A”到“T”。我会定义一个函数来实现它,并通过它转储每个字符串,我想削减到20个字符或更少。我正在做下面的代码在这样一种方式,它采取作为一个输入任何字符串,被称为它采取的输入和处理它的长度只有20个字符...

def twenty(z):
    a = z[0:20]
    return a

alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

因此,要执行我们新编写的代码,我们只需调用print twento命令,并在括号中添加我们希望剪切为20个字符的变量。

print twenty(alphabet)

-----------------------------------------------------------------
OUTPUT:
ABCDEFGHIJKLMNOPQRST

所以你看,它工作了,我们把整个字母表输入到程序中,它把字符串削减到20个字母。现在,每次在你的代码中,你想把文本削减到20个字母,只要运行命令twenty(变量),它会确保你没有超过20个字母。
说明:def twenty是定义一个只有一个输入的函数,只要输入twenty(变量)就可以反复调用它。下一行是a = z[0:20],意思是调用变量“a”来等于从位置0到位置20的输入,而不必担心超过这个位置的任何内容。return命令是你从def函数获得输出的方法。无论何时创建def函数,都应该以一行结束它。

相关问题