Метод onSet
требует в качестве первого аргумента экземпляр класса, в то время как вы передаете только аргумент text
.Поэтому, когда вы вызываете ваш метод onSet
, вы должны передать экземпляр класса AddWidgets
в качестве первого аргумента.Вы создаете экземпляр этого класса в классе MainWindow
:
self.add = AddWidgets(self.frame1)
Таким образом, вы должны передать переменную self.add
в функцию onSet
.Для этого необходимо, чтобы ваш класс EditWidget
принял дополнительный параметр widget
:
class MainWindow:
def __init__(self, master):
self.master = master
self.master.title("Class Function")
self.master.wm_iconbitmap('icon.ico')
self.master.geometry("360x240+100+100")
self.frame1 = ttk.Frame(self.master)
self.frame1.grid(row=0, column=0, padx=16, pady=16)
self.frame2 = ttk.Frame(self.master)
self.frame2.grid(row=0, column=1, padx=16, pady=16)
self.add = AddWidgets(self.frame1)
self.edit = EditWidgets(self.frame2, self.add) <--Add parameter self.add
class AddWidgets:
def __init__(self, master):
self.master = master
self.create_widgets()
def create_widgets(self):
self.label1 = ttk.Label(self.master, text="0")
self.label1.grid(row=0, column=0, padx=4, pady=4)
def onSet(self, text):
self.label1.configure(text=text)
class EditWidgets:
def __init__(self, master, widget): <-- add parameter widget
self.master = master
self.create_widgets()
self.widget = widget
def create_widgets(self):
def onEdit():
self.send_text = self.entry_text.get()
self.widget.onSet(self.send_text) <--call onSet from widget instance
[...]
РЕДАКТИРОВАТЬ: если вы хотите создать разные вкладки, все с одинаковыми виджетами, один подход может бытьследующее: вы создаете класс MainWindow
, где вы добавляете все вкладки в окно, используя класс Notebook
.
Затем вы создаете класс Add Widgets
, который добавляет необходимые виджеты в фрейм.Вы создаете экземпляр этого класса на каждой из созданных вкладок, чтобы заполнить их виджетами.
Чтобы получить значения переменных, которые вы устанавливаете на каждой вкладке, вы можете написать метод getEntryValue
(илилюбое имя), которое возвращает значение, установленное в записи.Примерно так:
class MainWindow:
def __init__(self, master):
self.master = master
self.master.title("Class Function")
self.master.geometry("360x240+100+100")
n = ttk.Notebook(master)
self.f1 = ttk.Frame(n) # Create first tab
self.f2 = ttk.Frame(n) # Create second tab
n.add(self.f1, text='One')
n.add(self.f2, text='Two')
n.pack()
self.widget1 = AddWidgets(self.f1)
self.widget2 = AddWidgets(self.f2)
class AddWidgets:
def __init__(self, master):
self.master = master
self.create_widgets()
def create_widgets(self):
def onEdit():
send_text = self.entry_text.get()
self.label1.configure(text = send_text)
self.label1 = ttk.Label(self.master, text="0")
self.label1.grid(row=0, column=0, padx=4, pady=4)
self.entry_text = tk.StringVar()
self.entry1 = ttk.Entry(self.master, textvariable=self.entry_text)
self.entry1.grid(row=0, column=1, padx=4, pady=4)
self.button1 = ttk.Button(self.master, text="edit", command=onEdit)
self.button1.grid(row=0, column=2, padx=4, pady=4)
def getEntryText(self):
return self.entry_text.get()
Надеюсь, это поможет.