2

エントリウィジェットのエントリ長を制限する方法を見つけるのに問題があります。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()
4

4 に答える 4

3

さて、私はトレース変数を試してみました。短いテストコードで、これはまさに私が探していたものです。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()
于 2012-07-16T11:32:42.220 に答える
1

最も簡単な解決策は、変数をトレースすることです。トレースが発生したら、値の長さを確認し、制限を超える文字を削除します。

このソリューションが気に入らない場合、Tkinter にはエントリ ウィジェットで入力検証を行う組み込み機能もあります。これは、Tkinter のあまり文書化されていない機能です。例については、Python/Tkinter: Interactively validationing Entry widget contentという質問に対する私の回答を参照してください。

于 2012-07-15T11:57:33.143 に答える