python StartPage实例没有属性's'

2024-04-19 00:51:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到:

print (p.s) AttributeError: StartPage instance has no attribute 's'

这是我的密码:

import Tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.s = []
        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)
        container = tk.Frame(self)
        container.grid(row=0, column=0, sticky='we')
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        self.frames = {}
        for F in (StartPage, images_result):
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            frame.grid(row=0, column=0, sticky='nsew')
            self.frames[page_name] = frame
        self.show_frame("StartPage")
    def get_SP(self):
        return self.frames["StartPage"]
    def images(self, page_name):
        self.s = [1, 2]
        frame = self.frames[page_name]
        frame.tkraise()
    def show_frame(self, page_name):
        '''Show a frame for the given page name'''
        frame = self.frames[page_name]
        frame.grid(row=0, column=0, sticky='snew')
        frame.tkraise()

class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        self.image_btn = tk.Button(self, text="Images", command=lambda: controller.images("images_result"))
        self.image_btn.grid(row=0, column=0, sticky='snew')



class images_result(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        p = self.controller.get_SP()
        print (p.s)



app = SampleApp()
app.mainloop()

编辑:

我希望SampleApp中的函数images更新SampleApp的属性s,然后我希望能够从类images\u结果访问它。你知道吗

我试着用

print(self.controller.s)

但是这就给了我[],而且似乎函数images对s属性所做的修改对于images\u结果是不可见的。你知道吗


Tags: nameselfframesinitcontainerdefpageframe
1条回答
网友
1楼 · 发布于 2024-04-19 00:51:03

代码中唯一作为s属性的类是SampleApp。这个类的实例作为每个页面的controller属性传递。因此,要从页面内访问s对象的SampleApp属性,将通过控制器:

print(self.controller.s)

需要注意的是,在您发布的代码中,__init__images_remote方法只会在应用程序首次启动时运行,因此__init__函数不会打印通过与其他页面交互设置的任何值。你知道吗

相关问题 更多 >