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()

基本的に、私の目標は、入力ボックスに入力された文字列に対して「チェッカー」またはそれを呼び出すことができるものを作成することでした。私は座標を扱っているので、最初にやりたかったことは、文字列にコンマが含まれているかどうかを確認することでした。含まれていない場合は、自動的にターミナルにエラーを通知し、後でウィンドウに通知します。コンマは、このプログラムの最終的な機能で操作する文字列の 2 つの主要部分を分割します。そのため、文字列をコンマから 2 つの部分に分割しました。次に、文字列の分割部分 (PTest_X と PTest_Y) を Try ステートメントを使用して float に変換できるかどうかを確認したいと考えました。これは明らかに、コンマの前後にある整数または浮動小数点数のみが変換で機能することを意味します。Try ステートメントの Except 部分は、以前と同様に、ターミナルにもエラーを返すように指示するだけです。したがって、PTest_X と PTest_Y を変換できる場合は、最終的にそれらをリストに追加し、リストのラベルを作成し、その他のことを行いたいと考えています。

この「チェッカー」システムのポイントは、座標点の「構文」が間違っていることをユーザーに知らせるフィードバックをユーザーに提供することです。この時点でこのシステムを実装して、すべてが既に処理された後にユーザーに伝えるのではなく、ポイントに間違って入力したことを伝えたいと思います。

私はこれをユーザーの使いやすさのために行っています。ユーザーとのやり取りに関しては、これが常に最優先されます。ユーザーがプログラムを使用する際の苦痛を軽減したいと考えています。

4

1 に答える 1

0

バインド機能は正常に動作しています。問題は、使用しているfind()かどうかを確認していることですTruefind()文字列が見つかった場合はインデックスを返し、それ以外の場合は -1 を返します。

また、インデックス0,1splitの前に数値の値を取得しているだけなので、どちらも機能しません。,

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 に答える