2016-04-07 5 views
0

次のコードでは、「タスクの追加」ボタンが2つのタスク間にスペースを作成して空の入力をリストボックスに追加するエラーが発生します。それが起こり得ない場所でこれをコーディングする方法はありますか?リストボックス内のリストは、各タスクが次々に現れる順番になるようにしたい。なぜこのようなことが起こるのか分かりません。それはPythonの一部ですか?再度、感謝します。 update(self)「タスクの追加」ボタンが空の文字列を受け付けないようにするにはどうすればよいですか?

enter image description here

import tkinter as tk 


def main(): 

    root = tk.Tk() 
    root.geometry("350x450") 
    root.title("basic window") 
    root.config(background="azure") 
    app = Application (root) 
    root.mainloop() 


class Application(tk.Frame): 

    def __init__(self, parent): 
     tk.Frame.__init__(self, parent, bg="yellow", bd=2, relief=tk.RIDGE) 
     self.parent = parent 
     self.initUI() 


    def initUI(self): 
     self.pack(fill="both", expand=1) 

     #widget layout 

     self.listbox = tk.Listbox(self, bd=2, relief=tk.SUNKEN, height="15") 
     self.listbox.grid(row=0, column=0, sticky="w", padx=5, pady=5) 

     self.entry=tk.Entry(self, width=19) 
     self.entry.grid(row=1, stick="w", padx=5) 

     self.button1=tk.Button(self, text="add task", command=self.update) 
     self.button1.grid(row=1, column=1, sticky="w", padx=5) 

     self.label=tk.Label(self, text="stats", bg="yellow") 
     self.label.grid(row=0, column=1, sticky="n") 

     #programing 

    def update(self): 

     self.listbox.insert("end", self.entry.get()) 
     self.entry.delete(0, "end") 



if __name__ == '__main__': 
    main() 

答えて

0

、あなたはself.entry.get()は、空の文字列が含まれているかどうかをテストする必要があります。更新された場合は、更新をスキップします。サイドノートでも

import tkinter as tk 

class Application(tk.Frame): 

    def __init__(self, parent): 
     tk.Frame.__init__(self, parent, bg="yellow", bd=2, relief=tk.RIDGE) 
     self.parent = parent 
     self.initUI() 


    def initUI(self): 
     self.pack(fill="both", expand=1) 

     #widget layout 

     self.listbox = tk.Listbox(self, bd=2, relief=tk.SUNKEN, height="15") 
     self.listbox.grid(row=0, column=0, sticky="w", padx=5, pady=5) 

     self.entry=tk.Entry(self, width=19) 
     self.entry.grid(row=1, stick="w", padx=5) 

     self.button1=tk.Button(self, text="add task", command=self.update) 
     self.button1.grid(row=1, column=1, sticky="w", padx=5) 

     self.label=tk.Label(self, text="stats", bg="yellow") 
     self.label.grid(row=0, column=1, sticky="n") 

     #programing 

    def update(self): 
     if self.entry.get() != '': 
      self.listbox.insert("end", self.entry.get()) 
      self.entry.delete(0, "end") 


def main(): 
    root = tk.Tk() 
    root.geometry("350x450") 
    root.title("basic window") 
    root.config(background="azure") 
    app = Application (root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 
+0

こんにちはReblochon、コードが動作します。どうもありがとう。私は、これはユーザーの入力があるたびに実行する必要があると思います。 – fishtang

+0

はい;入力文字列はボタンが押されるたびにテストされます。さらに多くの入力フィールドが必要で、空の文字列が入力されないようにするには、それぞれのコールバックメソッドで同じテクニックを使用できます。 –

0
def update(self): 
     if not self.entry.get()== "": #.get gets the value thgat the entry contains 
      self.listbox.insert("end", self.entry.get()) 
      self.entry.delete(0, "end") 

私は、オブジェクトを作るとき、私はそれはそれが簡単に見ることが可能と_txtまたは_lbl ectraを使用する傾向があり、代わりにself.entry使用例のためのより良い名前に何かself.intput_txtを使用することをお勧めしどのようなオブジェクトであるか一見

+0

こんにちは、私はちょうどそれを今のところ簡単に保つようにしました。アンダースコアで、私はもっと思うようになります。私は新しいプログラマーです。 – fishtang

+0

np何か他にあなたが投稿するのを躊躇しないでください – ryanmoir

関連する問題