2016-04-25 15 views
1

Ich versuche, eine kleine GUI zu erstellen, wenn der Benutzer eine Zahl in ein Textfeld eingibt, und es (als Beschriftung) anzeigt, ob es eine Primzahl ist oder nicht.Get tkinter, um Ausgabe in einem Textfeld anzuzeigen

Der Code ich habe zur Zeit "funktioniert" (wie in keine Fehler angezeigt), aber die Beschriftung ändert sich nicht.

Der Primzahlencode funktioniert in der Python-Shell.

Mein Code ist wie folgt:

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

Vielen Dank für jede Hilfe im Voraus, und lassen Sie es mich wissen, wenn Sie mehr Klarheit über alle Fragen möchten. Vielen Dank.

+0

All diese Leute Tkinter mit noch heute ... – linusg

+1

Sie ersetzen das Etikett durch einen neuen, anstatt die vorhandene Beschriftung ändern. Sie sollten zum Beispiel "label1 [" text "] =" Is prime "eingeben. –

+1

@AmitGold Wenn Sie die Antwort kennen, sollten Sie nicht auf die Schaltfläche "Kommentar hinzufügen" klicken, um die Antwort zu posten. –

Antwort

1

Sie erstellen die label1 jedes Mal neu, wenn Sie auf die Schaltfläche klicken. Außerdem packen Sie nicht den einen, den Sie erstellen, da dieser im lokalen Bereich der isPrime() Methode liegt. Wenn Sie den Text der Beschriftung ändern möchten, übergeben Sie ihn als Parameter an isPrime() und verwenden Sie .config(text="text here") oder 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)) 

oder Sie können label1 global machen und den Text ändern.

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

Brilliant, das funktioniert perfekt. Vielen Dank! – nyep

Verwandte Themen