单击按钮后在同一 gui 中显示标签
Posted
技术标签:
【中文标题】单击按钮后在同一 gui 中显示标签【英文标题】:Displaying label in same gui after button is clicked 【发布时间】:2014-12-25 16:08:19 【问题描述】:我正在尝试制作一个程序以在 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
请帮我在点击按钮'CLICK'
后在同一GUI中显示标签'HI'
。
【问题讨论】:
【参考方案1】:txt_frm
当前是 __init__
方法的本地。换句话说,没有办法从__init__
之外访问它。这意味着当您在 retrieve_inpu
中使用它时,Python 将无法找到该名称,因此会引发 NameError
。
你可以通过简单地制作txt_frm
和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
中使用它:
label = tki.Label(self.txt_frm,text='HI')
【讨论】:
那是因为您在创建按钮时也需要使用self.txt_frm
:button3 = tki.Button(self.txt_frm, ...)
。 txt_frm
现在是App
的实例属性,因此必须始终通过self
访问。以上是关于单击按钮后在同一 gui 中显示标签的主要内容,如果未能解决你的问题,请参考以下文章