【问题标题】:Displaying label in same gui after button is clicked单击按钮后在同一 gui 中显示标签
【发布时间】: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'

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

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

    你可以通过简单地制作txt_frmApp的实例属性来解决这个问题:

    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_frmbutton3 = tki.Button(self.txt_frm, ...)txt_frm 现在是App 的实例属性,因此必须始终通过self 访问。
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多