如何在tkinter输入框中设置焦点

时间:2016-08-06 05:53:48

标签: python tkinter

花了一段时间寻找答案。我是Python的新手,但不是一般的编码。找到各种版本非常具有挑战性!

无论如何,我非常注重Gui,并设法让tkinter使用Python 3.5.1

只是玩基础并拥有以下代码,但无法将焦点设置到第一个输入框。尝试了mEntry1.focus()和mEntry1.focus_set()但总是得到对象没有属性错误。有什么帮助吗?

from tkinter import *

def calc(*args):
  try:
      value1 = float(V1.get())
      value2 = float(V2.get())
      result.set(value1 * value2)
  except ValueError:
    pass
mGui = Tk()
mGui.geometry('450x450+200+200')
mGui.title('Test Gui')
V1 = StringVar()
V2 = StringVar()
result = StringVar()
mEntry1 = Entry(textvariable=V1,width=10).grid(row=0,column=0,sticky=W)
mEntry2 = Entry(textvariable=V2).grid(row=1,column=0)
mButton = Button(text='Calculate',command=calc).grid(row=3,column=0)
mlabel = Label(textvariable=result).grid(row=4,column=2)

1 个答案:

答案 0 :(得分:1)

每个Tkinter小部件都有focus_set方法。

您的代码存在的问题是.grid方法返回None。因此

mEntry1 = Entry(textvariable=V1,width=10).grid(row=0,column=0,sticky=W)

mEntry1设置为None,而不是小部件。因此,您需要创建窗口小部件并将其放在网格中,分两步:

mEntry1 = Entry(textvariable=V1,width=10)
mEntry1.grid(row=0,column=0,sticky=W)

当然,如果你实际上不需要对widget对象的引用,那么可以一步完成它。像

这样的东西
Entry(textvariable=V1,width=10).grid(row=0,column=0,sticky=W)

没关系。

顺便说一下,使用from tkinter import *并不是一个好主意。它会在您的命名空间中导入130多个名称,这可能会导致名称与您自己的名称冲突,或者如果您还使用“星号”导入语句导入名称冲突。它还使代码更难阅读。相反,你可以做

import tkinter as tk

然后使用tk.前缀引用Tkinter名称,例如tk.Entry而不是Entry