I am trying to import MainMenuBar class from filemenu.py to my main class and instantiate it in my main class init method in wxPython but I am getting error
RuntimeError: super-class __init__() of type MainMenuBar was never called
Here is my main class
import os
import wx
from wx.lib.agw.scrolledthumbnail import ScrolledThumbnail, Thumb, PILImageHandler
import filemenu
class MainFrameImageThumbnail(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Mockup", size=(1200,800))
self.scroll = ScrolledThumbnail(self, 10, size=(200,1200))
self.panel = wx.Panel(self)
self.scroll.SetBackgroundColour((5,5,5))
font = wx.Font( wx.FontInfo(10).Bold())
self.scroll.SetCaptionFont(font)
self.scroll.SetThumbOutline(4)
self.scroll.SetDropShadow(False)
self.scroll.SetSelectionColour(wx.Colour(120,80,255))
sizer = wx.BoxSizer(wx.VERTICAL)
self.menuCreation()
def menuCreation(self):
mainMenu = filemenu.MainMenuBar()
app = wx.App(False)
frame = MainFrameImageThumbnail()
frame.Show(True)
app.MainLoop()
Here is my filemenu.py
import os
import wx
APP_EXIT = 1
class MainMenuBar(wx.Panel):
def __init__(self):
self.FileTab()
def OnQuit(self, e):
self.Close()
def FileTab(self):
menubar = wx.MenuBar()
fileMenu = wx.Menu()
qmi = wx.MenuItem(fileMenu, APP_EXIT, '&Quit\tCtrl+Q')
qmi.SetBitmap(wx.Bitmap('power-on.png'))
fileMenu.Append(qmi)
self.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT)
menubar.Append(fileMenu, '&File')
self.SetMenuBar(menubar)
Am I calling it wrong? Is there a specific way to do this in WxPython?
EDIT:
Following an example, I attempted this which looks more correct but I am getting another error
My main class:
import os
import wx
from wx.lib.agw.scrolledthumbnail import ScrolledThumbnail, Thumb, PILImageHandler
import filemenu
class MainFrameImageThumbnail(wx.Frame):
def __init__(self):
super().__init__(parent=None,title="Mockup", size=(1200,800))
self.scroll = ScrolledThumbnail(self, 10, size=(200,1200))
self.panel = wx.Panel(self)
self.scroll.SetBackgroundColour((5,5,5))
font = wx.Font( wx.FontInfo(10).Bold())
self.scroll.SetCaptionFont(font)
self.scroll.SetThumbOutline(4)
self.scroll.SetDropShadow(False)
self.scroll.SetSelectionColour(wx.Colour(120,80,255))
sizer = wx.BoxSizer(wx.VERTICAL)
self.menu = filemenu.MainMenuBar(self)
self.menu.FileTab()
app = wx.App(False)
frame = MainFrameImageThumbnail()
frame.Show(True)
app.MainLoop()
my filemenu.py
import os
import wx
APP_EXIT = 1
class MainMenuBar(wx.Panel):
def __init__(self,parent):
super().__init__(parent)
def OnQuit(self, e):
self.Close()
def FileTab(self):
menubar = wx.MenuBar()
fileMenu = wx.Menu()
qmi = wx.MenuItem(fileMenu, APP_EXIT, '&Quit\tCtrl+Q')
qmi.SetBitmap(wx.Bitmap('power-on.png'))
fileMenu.Append(qmi)
self.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT)
menubar.Append(fileMenu, '&File')
self.SetMenuBar(menubar)
Now I get this error:
AttributeError: 'MainMenuBar' object has no attribute 'SetMenuBar'
There is a lot going on in the filemenu.py
, using a wx.Panel
here in conjunction with a menu makes no sense. See what to change to make it work.
New filemenu.py
import os
import wx
APP_EXIT = 1
# using a wxPanel complicates stuff and is not necessary
# class MainMenuBar(wx.Panel):
class MainMenuBar:
def __init__(self,parent):
# we do no need to initialize parent class because there is none
#super().__init__(parent)
# instead we keep track of the parent frame we want
# to integrate the menu bar into
self.parent = parent
def OnQuit(self, e):
# adapt to who is parent
self.parent.Close()
def FileTab(self):
menubar = wx.MenuBar()
fileMenu = wx.Menu()
qmi = wx.MenuItem(fileMenu, APP_EXIT, '&Quit\tCtrl+Q')
qmi.SetBitmap(wx.Bitmap('power-on.png'))
fileMenu.Append(qmi)
# who is parent -> wx.Frame
self.parent.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT)
menubar.Append(fileMenu, '&File')
# who is parent -> wx.Frame
self.parent.SetMenuBar(menubar)