Trying to build a GUI in Python at the moment, and I'm stuck at this part in particular. Every time I try to run my code it just throws the error TypeError: __init__() got multiple values for argument 'master'
. I can't seem to find where I'm passing it more than one value, and it's got me scratching my head. I tried searching the error but the fixes other people had listed I can't see how to make them work with this one. Any guidance would be much appreciated. See code sample below:
class Plotter(tk.Canvas):
"""Creates a canvas for use in a GUI
Plotter() -> Canvas
"""
def __init__(self, master, **kwargs):
super().__init__(self, master = master, **kwargs)
self.bind("<Configure>", self.on_resize)
self.height = self.winfo_reqheight()
self.width = self.winfo_reqwidth()
self.bg = 'white'
self.relief = 'raised'
class AnimalDataPlotApp(object):
"""This is the top level class for the GUI, and is hence responsible for
creating and maintaining instances of the above glasses
"""
def __init__(self, master):
"""Initialises the window and creates the base window for the GUI.
__init__() -> None
"""
master.title('Animal Data Plot App')
self._master = master
self._text = tk.Text(master)
self._text.pack
menubar = tk.Menu(master)
master.config(menu = menubar)
filemenu = tk.Menu(menubar) #puts filemenu into the menubar
menubar.add_cascade(label = 'File', menu = filemenu)
filemenu.add_command(label = 'Open', command = self.open_file)
#frame for canvas
plotter_frame = tk.Frame(master, bg = 'red')
plotter_frame.pack(side = tk.RIGHT, anchor = tk.NW, fill = tk.BOTH, expand = True)
#frame for buttons
button_frame = tk.Frame(master, bg = 'yellow')
button_frame.pack(side=tk.TOP, anchor=tk.NW, ipadx=50, fill = tk.X)
#Label on the top left
left_label = tk.Label(button_frame, text='Animal Data Sets', bg='orange')
left_label.pack(side=tk.TOP, anchor=tk.N, fill=tk.X)
#second frame, for selection list
selection_frame = tk.Frame(master, bg = 'blue')
selection_frame.pack(side = tk.LEFT, anchor=tk.NW, fill = tk.BOTH, expand = True)
#draw buttons in frame
select = tk.Button(button_frame, text ='Select')
select.pack(side=tk.TOP, anchor=tk.N)
deselect = tk.Button(button_frame, text='Deselect')
deselect.pack(side=tk.TOP, anchor=tk.N)
self.selectionbox = SelectionBox(selection_frame)
self.selectionbox.pack(side = tk.TOP, expand = True, fill=tk.BOTH)
#self._selectionbox.show_animals(self._data)
self.plotter = Plotter(plotter_frame)
self.plotter.pack(side = tk.TOP, expand = True, fill=tk.BOTH)
super().__init__(self, master = master, **kwargs)
If you're using super()
, you don't need to specify self
explicitly.
You are getting that error because self
is being interpreted as the argument for master
. So it's like if you were calling __init__(master=self, master=master, **kwargs)
.
The issue is in the following line in Plotter.__init__()
-
super().__init__(self, master = master, **kwargs)
When calling the parent's __init__
method, you do not need to pass the self
argument, when you do that, it is getting treated as the master
argument for the parent, and then when you try to pass master
as master=master
, it causes your error.
You should simply do -
super().__init__(master = master, **kwargs)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.