我正在尝试对一个应用程序进行编程,该应用程序将用户输入从一个页面转移到另一页面,而这些页面由类分隔。我遇到的问题是第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()
答案 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']