检查用户在输入框中选择时是否按'Return' Tkinter



我正在使用Tkinter为我正在创建的一个简单几何计算器创建一个GUI。

基本上,我有一个输入框。我想要的是让程序/GUI/系统检测程序的用户何时在"输入"框中点击"回车"或"返回"键。当检测到这一点时,我希望将条目框的内容附加到我之前定义的列表中。我还希望在GUI上创建一个简单的标签,显示列表的内容(包括附加的项目)。请注意,列表一开始什么都没有。

这是我到目前为止的代码:

from tkinter import *
#Window setup(ignore this)
app = Tk()
app.title('Geometry Calculator')
app.geometry('384x192+491+216')
app.iconbitmap('Geo.ico')
app.minsize(width=256, height=96)
app.maxsize(width=384, height=192)
app.configure(bg='WhiteSmoke')
#This is the emtry list...
PointList = []
#Here is where I define the variable that I will be appending to the list (which is the              object of the Entry box below)
StrPoint = StringVar()
def list_add(event):
#I don't really know how the bind-checking works and how I would implement it; I want to check if the user hits enter while in the Entry box here
    if event.char == '':
        PointList.append(StrPoint)
e1 = Entry(textvariable=StrPoint).grid(row=0, column=0)
app.bind('<Return>', list_add)
mainloop()

我真的不知道检查"Return"然后在if语句中使用它的正确方法。我希望你能理解我想得到的帮助,我四处寻找一个我能理解的解释,但没有成功。

与其绑定app,不如将其绑定到Entry小部件对象,即e1

from tkinter import *
#Window setup(ignore this)
app = Tk()
app.title('Geometry Calculator')
app.geometry('384x192+491+216')
app.iconbitmap('Geo.ico')
app.minsize(width=256, height=96)
app.maxsize(width=384, height=192)
app.configure(bg='WhiteSmoke')
#This is the emtry list...
PointList = []
#Here is where I define the variable that I will be appending to the list (which is the              object of the Entry box below)
StrPoint = StringVar()
def list_add(event):
    print ("hello")
#I don't really know how the bind-checking works and how I would implement it; I want to check if the user hits enter while in the Entry box here
    if event.char == '':
        PointList.append(StrPoint)
e1 = Entry(textvariable=StrPoint)
e1.grid(row=0, column=0)#use grid in next line,else it would return None
e1.bind('<Return>', list_add)# bind Entry
mainloop()

解决方案是在小部件本身上设置绑定。这样,只有当焦点放在该小部件上时,绑定才会应用。由于您绑定了一个特定的密钥,因此以后不需要检查该值。您知道用户按下了return,因为这是唯一会导致绑定触发的东西。

...
e1.bind('<Return>', list_add)
...

还有一个问题是,list_add函数需要调用变量的get方法,而不是直接访问变量。然而,由于您没有使用StringVar的任何特殊功能,因此您真的不需要它——这只是您必须管理的另一件事。

以下是如何在没有StringVar:的情况下做到这一点

def list_add(event):
    PointLit.append(e1.get())
...
e1 = Entry(app)
e1.grid(row=0, column=0)
e1.bind('<Return>', list_add)

请注意,您需要通过两个步骤创建小部件并布置小部件。按照您的方式执行(e1=Entry(...).grid(...)将导致e1None,因为这是.grid(...)返回的内容。

相关内容

  • 没有找到相关文章

最新更新