单击按钮后在同一个gui中显示标签

时间:2014-12-25 16:08:20

标签: python tkinter

我试图让程序在GUI中显示标签'HI',只有在同一GUI中单击按钮'CLICK'后才能显示。

我的代码:

import Tkinter as tki
class App(object):
     def __init__(self,root):
         self.root = root

         txt_frm = tki.Frame(self.root, width=900, height=900)
         txt_frm.pack(fill="both", expand=True)
         button3 = tki.Button(txt_frm,text="CLICK", command = self.retrieve_inpu)
         button3.grid(column=0,row=2)


     def retrieve_inpu(self):

        label = tki.Label(txt_frm,text='HI')
        label.grid(column=0,row=3)
root = tki.Tk()
app = App(root)
root.mainloop()

但我得到错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
    return self.func(*args)
  File "C:/Python27/teste.py", line 14, in retrieve_inpu
    label = tki.Label(txt_frm,text='HI')
NameError: global name 'txt_frm' is not defined

点击'HI'按钮后,请帮我在同一个GUI中显示标签'CLICK'

1 个答案:

答案 0 :(得分:2)

txt_frm目前是__init__方法的本地方法。换句话说,无法从__init__之外访问它。这意味着当您在retrieve_inpu中使用它时,Python将无法找到该名称,因此会引发NameError

您只需制作txt_frm的{​​{1}}和实例属性即可解决此问题:

App

现在,self.txt_frm = tki.Frame(self.root, width=900, height=900) self.txt_frm.pack(fill="both", expand=True) 可通过txt_frm访问,这意味着您可以在self内使用它:

retrieve_inpu