【问题标题】:Limiting entry on a tk widget限制 tk 小部件上的条目
【发布时间】:2012-07-14 12:35:29
【问题描述】:

我很难找到一种方法来限制条目小部件的条目长度,我想将其限制为 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()

【问题讨论】:

    标签: python regex tkinter python-2.7


    【解决方案1】:

    最简单的解决方案是对变量进行跟踪。当跟踪触发时,检查值的长度,然后删除任何超过限制的字符。

    如果您不喜欢该解决方案,Tkinter 还具有内置工具来对条目小部件进行输入验证。这是 Tkinter 的一个记录不足的功能。举个例子,看my answer问题Python/Tkinter: Interactively validating Entry widget content

    【讨论】:

    • 谢谢 Bryan 我会努力解决这个问题的
    【解决方案2】:

    好的,我确实在一小段测试代码上尝试了跟踪变量,这正是我正在寻找的!我喜欢你可以在 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()
    

    【讨论】:

      【解决方案3】:

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

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

      所以要执行我们新制作的代码,我们只需要调用 print 20 命令,并在括号中使用我们希望剪切为 20 个字符的变量。

      print twenty(alphabet)
      
      -----------------------------------------------------------------
      OUTPUT:
      ABCDEFGHIJKLMNOPQRST
      

      所以你看,它奏效了,我们将整个字母输入到程序中,它把字符串减少到只有 20 个字母。现在每次在你的代码中你想将文本减少到 20 个字母,只需运行命令 二十(变量) 它会确保你没有更多的字母。

      说明: def 20 是定义一个具有一个输入的函数,您只需键入 20(variable) 就可以一遍又一遍地调用它 下一行是 a = z[0:20] 意思是调用变量“a”来等于从位置 0 到位置 20 的输入,并且不要担心任何过去的事情。 return 命令是您从 def 函数获取输出的方式。任何时候你创建一个 def 函数,你都应该用一行结束它。

      【讨论】:

        【解决方案4】:

        我知道添加任何答案为时已晚,只是找到了一种更简单的方法来表示 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()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多