0

问题是,我已经对这段代码进行了更多扩展,但我遇到了另一个问题:当我运行这段代码时,绑定函数被忽略了(当然,我的窗口设置一如既往地在上面):

from tkinter import *
#Window setup, ignore this mostly
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')

PointList = []


def AddCheck(event):
    Point = e1.get()
    PointTest = Point
    if PointTest.find(',') is True:
        PTest_X = PointTest[0].split(',')
        PTest_Y = PointTest[1].split(',')
        try:
            PTest_X = float(PTest_X)
            PTest_Y = float(PTest_Y)
            PointList.append(Point)
            l1 = Label(app, text='PointList').grid(row=1, column=0)
            e1.delete(0, END)
        except:
            print('Error: Invalid point format.')
    if PointTest.find(',') is False:
        print('Error: Invalid point format.')

e1 = Entry(app)
e1.grid(row=0, column=0, sticky=W)
Entry.bind(e1, '<Return>', AddCheck)
mainloop()

基本上,我的目标是为输入框中的字符串创建一个“检查器”或任何您可能称之为的名称。我正在处理坐标,所以我想做的第一件事是查看字符串是否包含逗号。如果它不包含一个,我会自动向终端发出错误信号,稍后我会向窗口发出信号。逗号将拆分我将在该程序的最终功能中操作的字符串的两个主要部分。所以,我将字符串从逗号分成两部分。然后我想看看字符串的拆分部分(PTest_X 和 PTest_Y)是否可以通过 Try 语句转换为浮点数,这显然意味着只有逗号之前或之后的整数或浮点数才能在转换下工作。Try 语句的 except 部分只是告诉终端也像以前一样返回错误。所以,如果 PTest_X 和 PTest_Y 可以转换,那是我最终想要将它们附加到列表、制作列表标签以及做其他任何事情的时候。

这个“检查器”系统的目的是向用户提供反馈,告诉他们他们的坐标点“语法”,如果你愿意的话,是不正确的。我宁愿在这一点上实施这个系统来告诉用户他们错误地输入了一个点,而不是在一切都已经处理完之后告诉他们这个。

我这样做是为了用户友好,当涉及到用户交互时,这确实是第一位的。我希望减轻用户使用该程序的体验所带来的任何痛苦。

4

1 回答 1

0

绑定功能工作正常。问题是您正在使用find()& 检查它的True. find()如果找到字符串,则返回索引,否则返回-1 。

此外,您split也不起作用,因为它只是,在索引 0,1 处获取数字的值。

from tkinter import *
#Window setup, ignore this mostly
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')

PointList = []


def AddCheck(event):
    print ("hello")
    Point = e1.get()
    PointTest = Point
    print (PointTest)
    if ',' in PointTest:
        PTest_X, PTest_Y =PointTest.split(',')
        try:
            PTest_X = float(PTest_X)
            PTest_Y = float(PTest_Y)
            PointList.append(Point)
            l1 = Label(app, text=PointList)
            l1.grid(row=1, column=0)
            e1.delete(0, END)
        except:
            print('Error: Invalid point format.')
    if PointTest.find(',') is False:
        print('Error: Invalid point format.')

e1 = Entry(app)
e1.grid(row=0, column=0, sticky=W)
e1.bind('<Return>', AddCheck)
app.mainloop()

如果您需要不同的标签,那么您将不得不使用循环

于 2014-04-16T05:55:54.083 回答