2016-04-25 23 views
1

ユーザーがテキストボックスに数値を入力し、それが素数であるかどうかをラベルとして表示する小さなGUIを作成しようとしています。出力をテキストボックスに表示するためのtkinterの取得

私は現在「動作しています」(エラーは表示されないので)ラベルは変更されません。

素数のコードは、Pythonシェルで動作します。事前に任意の助け

from tkinter import * 

root = Tk() 

label1 = Label(root, text="Enter Number") 
E1 = Entry(root, bd =5) 

def isPrime(): 
    entry1 = E1.get() 
    entry1 = int(entry1) 
    for d in range(2,entry1): 
     if entry1 % d == 0: 
      label1 = Label(root, text="Not prime") 
      root.update_idletasks() 
      break 
    else: 
     label1 = Label(root, text="Is prime") 


submit = Button(root, text ="Submit", command = isPrime) 
root.update_idletasks() 

label1.pack() 
E1.pack() 
submit.pack(side =BOTTOM) 
root.mainloop() 

おかげで、あなたはすべての問題についてのより多くの明確化をたいなら、私に教えてください:

私のコードは次のとおりです。ありがとう。

+0

Tkinterを使用しているすべての人々は、現在でも... – linusg

+1

既存のラベルを変更する代わりに、ラベルを新しいものに置き換えます。たとえば、 'label1 [" text "] =" Is prime "'を実行する必要があります。 –

+1

@AmitGold答えがわかっている場合は、[コメントを追加]ボタンをクリックして回答を投稿しないでください。 –

答えて

1

ボタンをクリックするたびにlabel1を再作成しています。また、作成中のものは、isPrime()メソッドのローカルスコープに入っているので、パッケージ化していません。

ラベルのテキストを変更する場合は、パラメータとしてisPrime()に渡し、.config(text="text here")またはlabel["text"] = "text here"を使用する必要があります。

def isPrime(lbl): 
    entry1 = int(E1.get()) 
    for d in range(2,entry1): 
     if entry1 % d == 0: 
      lbl.config(text = "Not prime") 
      break 
    else: 
     lbl["text"] = "Prime" 

submit = Button(root, text ="Submit", command = lambda:isPrime(label1)) 

label1をグローバルにして、テキストを変更することができます。

def isPrime(): 
    global label1 
    entry1 = E1.get() 
    entry1 = int(entry1) 
    for d in range(2,entry1): 
     if entry1 % d == 0: 
      label1.config(text = "Not prime") 
      break 
    else: 
     label1["text"] = "Prime" 

submit = Button(root, text ="Submit", command = isPrime) 
+1

これは完璧に動作します。ありがとうございました! – nyep

関連する問題