web-dev-qa-db-ja.com

Tkinterでボタンが押された後にエントリウィジェットをクリアするにはどうすればよいですか?

ユーザーがTkinterを使用してボタンを押した後、Entryウィジェットをクリアしようとしています。

ent.delete(0, END)を使用しようとしましたが、文字列に属性deleteがないというエラーが発生しました。

real.delete(0, END)でエラーが発生しているコードは次のとおりです。

secret = randrange(1,100)
print(secret)
def res(real, secret):
    if secret==eval(real):
        showinfo(message='that is right!')
    real.delete(0, END)

def guess():
    ge = Tk()
    ge.title('guessing game')

    Label(ge, text="what is your guess:").pack(side=TOP)

    ent = Entry(ge)
    ent.pack(side=TOP)

    btn=Button(ge, text="Enter", command=lambda: res(ent.get(),secret))
    btn.pack(side=LEFT)

    ge.mainloop()
24
Dan

Introduction to Tkinter を少し調べた後、次のコードを思い付きました。このコードは、テキストフィールドを表示し、"Clear text"ボタンが押されます。

import tkinter as tk

class App(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master, height=42, width=42)
        self.entry = tk.Entry(self)
        self.entry.focus()
        self.entry.pack()
        self.clear_button = tk.Button(self, text="Clear text", command=self.clear_text)
        self.clear_button.pack()

    def clear_text(self):
        self.entry.delete(0, 'end')

def main():
    root = tk.Tk()
    App(root).pack(expand=True, fill='both')
    root.mainloop()

if __name__ == "__main__":
    main()
44
GreenMatt

entがエントリウィジェットへの適切な参照であると仮定すると、ent.delete(0, END)は正しい答えです。言うエラーを受け取った場合、コードにエラーがあります。自分でエラーを見つけることができない場合は、コードを表示する必要があります。

8
Bryan Oakley

realは、文字列である値ent.get()を取得します。どこから来たのかわからず、ウィジェットに影響を与える方法もありません。

real.delete()の代わりに、エントリウィジェット自体で.delete()を呼び出します。

def res(ent, real, secret):
    if secret == eval(real):
        showinfo(message='that is right!')
    ent.delete(0, END)

def guess():
    ...
    btn = Button(ge, text="Enter", command=lambda: res(ent, ent.get(), secret))

あなたの質問については不明です。 http://effbot.org/tkinterbook/entry.htm#patterns から、削除を呼び出した後に割り当てを行う必要があるようです。ウィジェットにエントリテキストを追加するには、insertメソッドを使用します。現在のテキストを置き換えるには、新しいテキストを挿入する前にdeleteを呼び出すことができます。

e = Entry(master)
e.pack()

e.delete(0, END)
e.insert(0, "")

もう少しコードを投稿できますか?

3
Charles Merriam

まず、テキストが有効になっていることを確認してから、タグを削除してからコンテンツを削除します。

myText.config(state=NORMAL)
myText.tag_delete ("myTags")
myText.delete(1.0, END)

テキストが「無効」の場合、テキストフィールドは読み取り専用モードであるため、削除は機能しません。

0
Eric B.

'END'を使用する代わりにent.delete(0,"end")を続行し、引用符で 'end'を使用します。

 secret = randrange(1,100)
print(secret)
def res(real, secret):
    if secret==eval(real):
        showinfo(message='that is right!')
    real.delete(0, END)

def guess():
    ge = Tk()
    ge.title('guessing game')

    Label(ge, text="what is your guess:").pack(side=TOP)

    ent = Entry(ge)
    ent.pack(side=TOP)

    btn=Button(ge, text="Enter", command=lambda: res(ent.get(),secret))
    btn.pack(side=LEFT)

    ge.mainloop()

これで問題が解決します

0
Prashant Mishra
def clear():                                                                           
        global input                                                                    
        abc =  
        input.set(abc)                                                                     

root = Tk()                                                               
input = StringVar()                                                             
ent = Entry(root,textvariable =                                       input,font=('ariel',23,'bold'),bg='powder                            blue',bd=30,justify='right').grid(columnspan=4,ipady=20)                       
Clear = Button(root,text="Clear",command=clear).pack()                       

入力はエントリ内のテキスト変数を設定します。これは文字列変数であり、文字列変数のテキストを「」として設定すると、エントリ内のテキストがクリアされます

0
Darnal Adrian