2016-05-23 60 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

'checking'是check中的局部变量。 –

回答

1

您的应用有几个问题,您可能需要考虑重新考虑结构和小部件管理。请考虑阅读(http://effbot.org/tkinterbook/grid.htm)并检查其他帖子,并确保您检查@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

谢谢的答案是,我在应用程序中进行了更改,现在它效果很好!