2016-04-09 2 views
0

Я использую Tkinter с python для простого интерфейса, где у меня есть текстовый виджет и кнопка. Когда кнопка нажата, я хочу, чтобы фокус курсора был установлен в текстовом виджете, используя метод focus_set().Tkinter focus_set() не работает в текстовом виджете

Я не понимаю, почему focus_set() не работает в моем коде. Я думаю, это может быть потому, что мой текстовый виджет находится внутри фрейма (frame1), и я не могу правильно получить доступ к этому виджету в моем методе 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

Следующие работы на моей машине. Обратите внимание, что фокус всегда находится в виджете «Текст» для отправленного вами кода, введите что-то, чтобы увидеть это, потому что фокус никогда не устанавливается нигде, но в коде ниже он чередуется между виджем «Текст» и кнопкой, чтобы проиллюстрировать.

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

Я сделал больше, чем добавил строку, так как я надеюсь, также выпрямил фрейм-беспорядок. Скопируйте и вставьте отправленный код, запустите его и посмотрите, что произойдет. –

Смежные вопросы