Я пытаюсь обновить 4 StringVar()
со значениями, считанными только после открытия файла. Я пытаюсь использовать абстрактный метод set_values()
по классу TestPage
для обновления 4 StringVar()
.Обновить экземпляр класса 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 inherets от Tk.Frame
. Я считаю, что «Instantiate» TestPage
объекта, когда я звоню show_frame()
в главном Application
класса, который inherets из 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()
, чтобы сделать некоторое заполнение графов и проанализировать файл, выбранный для открытия.
...
def load_file():
...
if file_name:
gui.TestPage.set_values()
...
...
Когда я пытаюсь я получаю ошибку:
TypeError: unbound method set_values() must be called with TestPage instance as first argument (got nothing instead)
Мне нужно вызвать метод на конкретизированной экземпляре тестовой страницы, но я не понимаю, какой параметр поставлять set_values()
указать self
или текущий экземпляр TestPage
. В классе Application
я думал, что создавал TestPage
как frame
в строке frame = F(container, self)
. Но я не смог ссылаться на set_values()
, используя frame
.
Я даже не уверен, что это лучший способ сделать это. Я попытался заменить метод связями, событиями, а также @classmethod
и @staticmethod
, но без реальных успехов. Должен ли я использовать абстрактный метод для этого?
Что? Откуда вы ожидаете появления «парсера»? Вы когда-нибудь на самом деле * создавали экземпляр 'TestPage'? – jonrsharpe
Я использую класс Application, который устанавливает tk, и использует словарь и отдельный метод для переключения между кадрами. «Парсер» - третий уже реализованный модуль, он «анализирует» файл для значений, которые я хотел бы присвоить «StringVar()», и помещает их в разные списки, извините, я мог бы упомянуть об этом :) – djoe
@jonrsharpe Я отредактировал свой вопрос и удалил ссылку на синтаксический анализатор и попытался указать, что TestPage фактически экземпляр. Я думал, что эта деталь не имеет значения для вопроса. Все остальное, чем конкретная проблема в вопросе, который вы можете предположить, работает правильно. Я не понимаю нисходящего, но спасибо за попытку помочь :) – djoe