2016-04-09 7 views
0

私はテキストウィジェットとボタンがあるシンプルなUIのためにPythonでTkinterを使用しています。ボタンを押すと、focus_set()メソッドを使ってカーソルフォーカスをテキストウィジェットに設定します。Tkinter focus_set()はテキストウィジェットでは機能しません

なぜ私のコードでfocus_set()が機能しないのか分かりません。テキストウィジェットがフレーム(フレーム1)内にあり、私のstartPaus()メソッドでこのウィジェットに正しくアクセスできないことが原因と思われます。どのように私は問題を解決することができます任意のアイデア??

class TypingField(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent 

     self.submit_tog = True 
     self.initUI() 

    def initUI(self): 
     self.parent.title("Text Field") 
     self.pack(fill = BOTH, expand=True) 

     frame1 = Frame(self, width = 50, height =25) 
     frame1.pack(fill = X, expand=True) 
     self.scroll = Scrollbar(frame1) 
     self.scroll.pack(side = "right", fill = Y) 
     self.text = Text(frame1) 
     self.text.pack(fill=Y) 
     self.scroll.config(command=self.text.yview) 
     self.text.config(yscrollcommand=self.scroll.set) 


     frame2 = Frame(self) 
     frame2.pack(fill=X, expand=True) 
     self.submit = Button(frame2,text="Start Test") 
     self.submit.bind("<Button-1>", self.startPause) 
     self.submit.pack(fill=X) 

    def startPause(self, event): 
     if self.submit_tog: 
      self.submit.configure(text = "Pause") 
      self.text.focus_set() 
     else: 
      self.submit.configure(text = "Start Test") 
     self.submit_tog = not self.submit_tog 

答えて

0

以下は私のマシンで動作します。フォーカスはあなたが投稿したコードのTextウィジェットに常にあり、フォーカスを決して他の場所に設定しないので、これを見るために何かを入力しますが、下のコードでTextウィジェットとButtonを交互に表示します。

class TypingField(): 
    def __init__(self, parent): 
     self.parent = parent 
     self.submit_tog = True 
     self.initUI() 

    def initUI(self): 
     self.parent.title("Text Field") 

     frame1 = Frame(self.parent, width = 50, height =25) 
     frame1.pack(fill = X, expand=True) 
     self.scroll = Scrollbar(frame1) 
     self.scroll.pack(side = "right", fill = Y) 
     self.text = Text(frame1) 
     self.text.pack(fill=Y) 
     self.scroll.config(command=self.text.yview) 
     self.text.config(yscrollcommand=self.scroll.set) 

     frame2 = Frame(self.parent) 
     frame2.pack(fill=X, expand=True) 
     self.submit = Button(frame2,text="Start Test") 
     self.submit.bind("<Button-1>", self.startPause) 
     self.submit.pack(fill=X) 

    def startPause(self, event): 
     if self.submit_tog: 
      self.submit.configure(text = "Text Focus") 
      self.text.focus_set() 
     else: 
      self.submit.configure(text = "Button Focus") 
      self.submit.focus_set() 
     self.submit_tog = not self.submit_tog 

root=Tk() 
TypingField(root) 
root.mainloop() 
+0

返信ありがとうございますが、何らかの理由でこれは私の場合ではなく、テキストフィールドに焦点を当てません。あなたの行を追加することによって、それはまだ動作しません。 – swang

+0

一度self.text.focuse_set()を実行すると、self.focus_get()== self.textによってフォーカスがチェックされ、Trueを返します。しかし、私はテキストフィールドを選択せず​​にすぐに物事を入力することはできませんので、テキストフィールドに焦点を当てていません。フォーカスはまだボタンにあります – swang

+0

私は、フレームの混乱をまっすぐに整えたので、私はラインを追加する以上のことをしました。投稿されたコードをコピーアンドペーストして実行し、何が起こるかを見てください。 –

関連する問題