如何将变量从一类继承到另一类?

时间:2020-10-20 13:22:14

标签: python python-3.x tkinter

我正在尝试对一个应用程序进行编程,该应用程序将用户输入从一个页面转移到另一页面,而这些页面由类分隔。我遇到的问题是第2页上的数组输出未更新。基本上,输出只是[],它只是起始的初始化变量。我已经尝试过一些在堆栈溢出时发现的解决方案,例如在PageTwo类的init位再次将其称为全局变量,以及尝试使用PageOne.overall_data和self.overall_data,但是问题仍然存在,尽管没有任何错误。在尝试任何操作之前,这是代码的一部分。我尝试删除不相关的部分,但不确定是否删除过多,因此非常感谢反馈。感谢您的阅读!

import tkinter as tk
import tkinter_nav as tknav
from tkinter import ttk
import numpy as np
class App(tknav.Wrapper):

     def __init__(self):
          tknav.Wrapper.__init__(
            self,
            pages=[PageOne, PageTwo],
            start_state={'previous_page': None}
        )
          self.geometry('450x450')
          self.show_page('page_one')
class PageOne(tknav.Page):

    def __init__(self, parent):
          tknav.Page.__init__(self, parent, 'page_one')
          player_details = []
          global overall_data
          overall_data = []
          my_notebook = ttk.Notebook(self)
          my_notebook.pack(pady = 15)
          my_notebook.pack(fill="both", expand=True)
          my_frame1 = tk.Frame(my_notebook, width = "500", height = "500")
          def submit():                        #called every time inputs are made to be appended to player_details then overall_data
             player_details = []
             global overall_data
             player_details.append(name.get())
             player_details.append(health.get())
             player_details.append(ac.get())
             player_details.append(initiative.get())
             overall_data.append(player_details)
             overall_data = sorted(overall_data, key = lambda x:x[3])
             print(str(overall_data))
class PageTwo(tknav.Page):        #second page of the application

    def __init__(self, parent):
        tknav.Page.__init__(self, parent, 'page_two')

        tk.Label(
            self,
            text='Page Two'
        ).pack()

        tk.Button(
            self,
            text='Navigate to Page One',
            command=lambda: self.__navigate(),
        ).pack()

        line21 = tk.Label(self, text = str(overall_data), font = ('Times New Roman', 12))
        line21.place(x = 30, y  = 30, width = 100, height = 25)
    def __navigate(self):
        print('navigating to page one')
        self.navigate('page_one')


if __name__ == '__main__':
    App().mainloop()


2 个答案:

答案 0 :(得分:1)

您可以像这样将数据放在PageOne中的类级别:

class PageOne(tknav.Page):
    overall_data = []

并像这样在任何地方使用它:

    PageOne.overall_data.append(player_details)

答案 1 :(得分:0)

由于您使用过tkinter_nav,因此可以使用其提供的app_state在页面之间共享数据:

class App(tknav.Wrapper):
     def __init__(self):
        tknav.Wrapper.__init__(
            self,
            pages=[PageOne, PageTwo],
            start_state={'previous_page': None, 'overall_data': []} # added 'overall_data'
        )
        self.geometry('450x450')
        self.show_page('page_one')

然后,您可以通过以下方式访问每个页面中的共享数据:

self.app_state['overall_data']