【问题标题】:python StartPage instance has no attribute 's'python StartPage 实例没有属性's'
【发布时间】:2019-03-25 16:15:09
【问题描述】:

我得到:

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_results 访问它。

我尝试使用

print(self.controller.s)

但这给了我 [] 并且似乎函数 images 对 s 属性所做的修改对 images_result 不可见。

【问题讨论】:

  • 那么你为什么期望StartPage 有一个s 属性呢?
  • @Aran-Fey 我正在尝试从一页到另一页的信息以显示它,如果这就是您的问题的意思
  • @Aran-Fey 类似于link
  • 您意识到SampleApp 具有s 属性,而不是StartPage
  • @Aran-Fey 对不起,我的错,我已经编辑了我的问题,请再次阅读并尝试帮助我

标签: python python-2.7 tkinter


【解决方案1】:

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

print(self.controller.s)

请务必注意,在您发布的代码中,images_remote__init__ 方法只会在应用程序首次启动时运行,因此通过与其他页面交互设置的任何值都不会被__init__ 函数。

【讨论】:

  • 对不起,我的错,我已经编辑了我的问题,请再次阅读并尝试帮助我
猜你喜欢
  • 2012-10-07
  • 1970-01-01
  • 2015-03-22
  • 2013-10-05
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 2013-01-09
  • 2016-06-29
相关资源
最近更新 更多