花了一段时间寻找答案。我是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)
答案 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
。