3

私はこの問題に遭遇しました、そして私は理由を理解することができません。

私は自分のアプリケーションから自分のコードを取り出し、このテストコードを作成したので、私が何を求めているかを確認するために大量のジャンクを調べる必要はありません。

私はこれを他のコードで動作させています。しかし、2つを比較した後、私は私の人生のためにこれを理解することはできません。

このアプリケーションでは、「AttributeError:'NoneType'オブジェクトに属性'delete'がありません」というエラーが発生します。

import Tkinter as tk

def main():
    mainWindow = tk.Tk()
    v = tk.StringVar()
    entryBox = tk.Entry(mainWindow, textvariable=v).grid(column=0, row=1)
    def test():
        entryBox.delete(0,20)
    testButton = tk.Button(mainWindow, text='Go!', command=test, padx=10).grid(row=2, column=0) 
    tk.mainloop()
main()
4

5 に答える 5

9

この行で:

entryBox = tk.Entry(mainWindow, textvariable=v).grid(column=0, row=1)

gridは何も返さないため、entryBoxはNone。であり、deleteメソッドはありません。でメソッドを呼び出すように設定entryBoxする必要がありますtk.Entry(mainWindow, textvariable=v)gridentryBox

于 2012-10-21T22:36:45.497 に答える
1

これが発生する理由は、同じ変数でグリッド化するためです。コードを次のように変更すると、機能するはずです。

import Tkinter as tk
def main():
    mainWindow = tk.Tk()
    v = tk.StringVar()
    entryBox = tk.Entry(mainWindow, textvariable=v)
    def test():
        entryBox.delete(0,20)
    testButton = tk.Button(mainWindow, text='Go!', command=test, padx=10)
    testButton.grid(row=2, column=0) 
    entryBox.grid(column=0, row=1)
    tk.mainloop()
main()

これが機能する理由は、grid()何も返さないためです。

于 2012-10-21T22:35:49.947 に答える
0

あなたentryBoxがそれを呼びかけようとしているとき、あなたがここで宣言したことはまだ得られていませんdelete。エラーを再現する簡単な方法が必要な場合。

In [1]: x = None
In [2]: x.delete
AttributeError: 'NoneType' object has no attribute 'delete'

これを修正するには、entryBoxをラップするか、確実に取得することができます。

if entryBox:
   entryBox.delete(0, 20)
于 2012-10-21T22:35:08.277 に答える
0

entryBox = tk.Entry(mainWindow, textvariable=v).grid(column=0, row=1)

#同じ行で使用する代わりに、このようにすることができます

entryBox = tk.Entry(mainWindow, textvariable=v) entryBox.grid(column=0, row=1)

于 2021-02-04T16:27:39.767 に答える
0

エントリウィジェットをクリアする場合は、ウィジェットコンテンツを削除する代わりに、テキスト変数をクリアします。

text_variable.set("") or v.set("")
于 2022-02-20T14:20:10.663 に答える