2016-05-23 9 views
1

ich neue Dinge mit tkinter „experimentieren“ (ich bin ein Anfänger mit ihm) und ich machte, nur zum Spaß natürlich, diese Anwendung:löschen Gitterelemente - Tkinter

from tkinter import * 

def text() : 
    if checking : 
     content.grid_forget() 
    else : 
     content = Label(root, text = txt.get()).grid(row = 3, column = 0) 

def check() : 
    checking = True 
    text() 

root = Tk() 

txt = StringVar() 
checking = False 

bt1 = Button(root, text = "Print me!", command = text) 
bt2 = Button(root, text = "Clear!", command = check) 
txt1 = Entry(root, textvariable = txt) 

row = 0 
for i in [bt1, bt2, txt1] : 
    i.grid(row = row, column = 0) 
    row+=1 

root.mainloop() 

Meine Frage ist, warum isn Funktioniert der "Clear" -Knopf?

+1

'checking' ist eine lokale Variable innerhalb' check'. –

Antwort

1

Es gibt einige Probleme mit Ihrer App, Sie sollten vielleicht die Struktur und Ihr Widget-Management überdenken. Bitte beachten Sie, lesen (http://effbot.org/tkinterbook/grid.htm) und überprüfen Sie andere Beiträge auf Stackoverflow und stellen Sie sicher, @Bryan Oakley Vergangenheit und Gegenwart Kommentare zu überprüfen.

Sie lokale Variablen verwenden, wie er erwähnt, dies leicht als global korrigiert wird, indem er erklärt, wie folgt:

global variable_name 

in Ihrem Code,

zusätzlich, möchten Sie vielleicht Ihre Inhalte prüfen Umstrukturierung ("label"), wenn Sie es zu Ihrem root-Fenster add: aus:

content = Label(root, text = txt.get()).grid(row = 3, column = 0) 

zu:

content = Label(root, text = txt.get()) 
content.grid(row = 3, column = 0) 

, wenn Sie nicht sicher sind, was los ist, betrachten Druck Hinzufügen(), um den Code, hier ist ein kurzer Auszug:

def text() : 
    global content 
    print(root.grid_slaves()) 
    if checking : 
     content = Label(root, text = txt.get()) 
     content.grid(row = 3, column = 0) 

Sie werden sofort sehen, dass jedes Mal, wenn Sie auf Drucken klicken Ich, Widgets werden zu Ihrem Layout hinzugefügt.

Best Practices für Ihr Layout (Best way to structure a tkinter application)

Schnell Hinweis:

def text() : 
    print(checking) 
    if checking : 
     content.grid_forget() 
    else : 
     content = Label(root, text = txt.get()).grid(row = 3, column = 0) 

def check() : 
    checking = True 
    text() 

root = Tk() 

txt = StringVar() 
checking = False 

Prüfung ist immer falsch ... Sie sich anschauen sollten eine gewisse Logik Umdenken auch

0

Danke für Die Antwort, ich habe Änderungen in der Anwendung gemacht und jetzt funktioniert es super!