Прежде всего, я должен сказать, что я новичок в Python, поэтому мой код может показаться избыточным или запутанным.Я сделал этот код, который состоит из двух классов, которые оба tkinter frame.Hdf5GUI наследует от класса GUI и отлично работает.Класс ExportGUI
наследуется от Hdf5GUI
и вызывается функцией export
.
# Parent class
from Tkinter import *
class GUI:
def __init__(self):
pass
class Hdf5:
def __init__(self):
self.datatsetsfilter = "Something"
class Hdf5GUI(GUI):
def exportDatasetPath(self):
self.ohdf5 = Hdf5()
Так что до сих пор мой код прекрасно работал, но мне приходилось завершать свою программу некоторыми другими функциями, которые я вызываю в ExportGUI
.Например, export_filter
, я пытаюсь получить доступ к родительской переменной datasetsfilter
через дочернюю функцию, но она не работает:
#==============================================================================
# Child class
#==============================================================================
class ExportGUI(Hdf5GUI):
def __init__(self,hdf5w, master):
self.master = master
self.master.title("Export")
self.master.geometry('200x200')
label = Label(self.master, text="Choose the kind of export")
label.place(x=20, y=0)
export_selected = Button(self.master, text = 'Export filters',command=self.export_filter)
export_selected.place(x=20, y=50)
self.master.mainloop()
def export_filter(self):
print(self.ohdf5.datatsetsfilter)
Но я получил следующую ошибку:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\ProgramData\Anaconda2\lib\lib-tk\Tkinter.py", line 1542, in __call__
return self.func(*args)
File "GUI\GUI.py", line 397, in export_filter
print(self.ohdf5.datatsetsfilter)
AttributeError: 'ExportGUI' object has no attribute 'ohdf5'
Ни ohdf5
, ни datatsetsfilter
не известны ExportGUI
(у меня была такая же ошибка с self.datatsetsfilter
). Учитывая, что этот код не работает Я попытался использовать функцию super
.Я создал функцию get_datasetsfilter
в Hdf5GUI
:
def get_datasetsfilter(self):
return self.datasetsfilter
, а затем вызвал ее в ExportGUI
(я добавил __metaclass__ = type
, чтобы исправить тип prblm в 2.7):
def export_filter(self):
super(ExportGUI, self).get_datasetsfilter
Признаюсь, я видел много других примеров с Super
, но все они, похоже, используются в методе __init__
.Тем не менее, это все еще не работает.Теперь мне интересно, является ли ошибка результатом моего плохого понимания наследования или tkinter
.