我正在尝试使用仅在打开文件后读取的值更新4 StringVar()
。我尝试在类set_values()
上使用抽象方法TestPage
来更新4 StringVar()
。
...
class TestPage(Tk.Frame):
def __init__(self, parent, *controller):
Tk.Frame.__init__(self, parent)
self.x = Tk.StringVar()
self.y = Tk.StringVar()
self.z = Tk.StringVar()
self.w = Tk.StringVar()
...
x_label = ttk.Label(self, textvariable=self.x)
y_label = ttk.Label(self, textvariable=self.x)
z_label = ttk.Label(self, textvariable=self.x)
w_label = ttk.Label(self, textvariable=self.x)
...
def set_values(self):
self.x.set(some.list[0])
self.y.set(some.other_list.last_index)
self.z.set(some.list_total_entries)
self.w.set('herro worr')
...
TestPage内容来自Tk.Frame
。我相信我会实例化'我在主TestPage
课程中致电show_frame()
的{{1}}对象,该课程来自Application
:
Tk
我想从我现有的# ***** Tkinter Gui classes *****
# Main container, called by app.gui.Application() in main.py
class Application(Tk.Tk):
def __init__(self, *args, **kwargs):
Tk.Tk.__init__(self, *args, **kwargs)
container = Tk.Frame(self, name='container')
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (EntryPage, TestPage):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(EntryPage)
# ***** Change view/frame *****
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
# ***** Open file *****
def open_file(self):
functions.load_file()
...
函数中调用set_values()
,该函数位于单独的load_file
模块中。我调用functions
来填充图表,并解析为开放而选择的文件。
load_file()
当我尝试时,我收到错误:
TypeError:必须使用TestPage实例作为第一个参数调用未绑定方法set_values()(没有取而代之)
我需要在实例化的TestPage实例上调用该方法,但我不明白要向...
def load_file():
...
if file_name:
gui.TestPage.set_values()
...
...
提供哪个参数来指示set_values()
或self
的当前实例。在TestPage
课程中,我认为我在行Application
中将TestPage
实例化为frame
。但我无法使用frame = F(container, self)
引用set_values()
。
我甚至不确定这是最好的方法。我尝试用绑定,事件以及frame
和@classmethod
替换方法,但没有真正的成功。我应该使用抽象方法吗?
答案 0 :(得分:1)
您要更改的值是对象的属性,因此您需要通过实例更改它们。换句话说,不要将某些东西传递给" self"类或抽象函数的参数,只需调用对象本身的函数。
例如:
...
testfile = TestPage(...)
...
load_file(testpage)
...
def load_file(page):
...
page.set_values()