Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python Tkinter类之外更改label属性_Python_Tkinter - Fatal编程技术网

如何在python Tkinter类之外更改label属性

如何在python Tkinter类之外更改label属性,python,tkinter,Python,Tkinter,我有一个tkinter项目,主脚本(不是完整的程序,很长时间)看起来像这样,标签(led_a)是在TK类中创建的 .... def fun_A: ... #need to hidden led_A #**need to implement** led_A.forget() or .place() class home(tk.Tk) def __init__(self, *args, **kwargs) tk.Tk

我有一个tkinter项目,主脚本(不是完整的程序,很长时间)看起来像这样,标签(led_a)是在TK类中创建的

 ....
 def fun_A:
      ...
      #need to hidden led_A 
      #**need to implement** led_A.forget() or .place()
 class home(tk.Tk)
    def __init__(self, *args, **kwargs)        
        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.wm_title(self, "Graph ")       
        self.geometry("1000x800")

        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand = True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        F=Graph
        frame=Graph(container, self)
        self.frames[F] = frame
        frame.grid(row=0, column=0, sticky="nsew")
        self.show_frame(Graph)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

 class Graph(tk.frame):
       def __init__(self,parent,controller):
          ...
          photo = PhotoImage(file='1.jpg')
          led_A = label(self, image = photo)

 app = home()
 app.mainloop()

所以我尝试实现led_A。忘记在乐趣中,我该怎么做?我尝试了
全局led_A
,但主程序无法识别它。感谢

要操作对象,您需要对象的引用。在这种特定情况下,您需要将
led\u设置为一个
实例属性,以便可以引用它。您还需要在控制器中添加一个方法,以便访问
图形的实例

要使
led\u成为一个
实例属性:

class Graph(tk.frame):
    def __init__(self,parent,controller):
        ...
        photo = PhotoImage(file='1.jpg')
        self.led_A = label(self, image = photo)
        ...
要向控制器添加方法,请执行以下操作:

class home(tk.Tk)
    ...
    def get_frame(self, frame_class):
        return self.frames[frame_class]
理想情况下,
func\u A
不应该知道
Graph
是如何实现的,因为
func\u A
不在
Graph
内。这意味着您需要在
图形中添加一个函数,该函数将添加或删除led

class Graph(tk.frame):
    ...
    def turn_on_led(self):
        self.led_A.grid(...)
最后,您需要修改
fun\u A
以使用此方法获取对图形的引用并调用函数:

def fun_A():
    graph = app.get_frame(Graph)
    graph.turn_on_led()

app.frame.led_A
,需要
self.frame=Graph(…
您需要将
led_A
更改为实例变量
self.led_A
,然后您可以作为
app.frames[Graph].led_A
访问它。但是您需要先解决代码的语法问题。