2016-05-23 6 views
1

Я «экспериментировать» новые вещи с Tkinter (я новичок с ним), и я сделал, только для удовольствия, очевидно, это приложение:Удалять элементы сетки - 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() 

Мой вопрос, почему ISN «Ясная» кнопка работает?

+1

'проверка' является локальной переменной внутри' check'. –

ответ

1

У вас есть несколько проблем с вашим приложением, вы можете подумать о переосмыслении структуры и управления виджетами. рассмотрите возможность чтения (http://effbot.org/tkinterbook/grid.htm) и проверьте другие сообщения в stackoverflow и убедитесь, что вы проверяете @Bryan Oakley прошлые и настоящие комментарии.

Вы используете локальные переменные, как он отметил, это легко исправить, объявив ее как глобальный следующим образом:

global variable_name 

в вашем коде,

кроме того, вы можете рассмотреть вопрос о реструктуризации вашего контента ("метка"), когда вы добавляете его в корневое окно: от:

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

к:

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

, если вы не уверены в том, что происходит, рассмотреть вопрос о добавлении печати() в код, вот быстрый отрывок:

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

вы сразу увидите, что каждый раз, когда вы нажимаете на печать меня, виджеты добавляются в ваш макет.

лучшие практики для макета (Best way to structure a tkinter application)

Быстрой Подсказка:

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 

проверка всегда Ложная ... Вы могли бы рассмотреть переосмысление некоторой логики, а

0

Спасибо для ответ, я внес изменения в приложение, и теперь он отлично работает!

Смежные вопросы