Wx menubar exception type error

Résolu
Bonjour,

je développe actuellement une IHM comprenant un menu. Comme je le souhaitais personnalisé, j'ai créé une nouvelle classe héritée de wx.MenuBar :

import wx

class MyMenu(wx.MenuBar):

	def __init__(self, parent):
		super(wx.MenuBar, self).__init__(parent)
		self.p = parent
		
		# FILE MENU \
		fileMenu = wx.Menu()
		
		self.Append(fileMenu, 'File')
		# FILE MENU /
	
	def newGC(self, event):
		self.p.display('GC')
	
	def newNull(self, event):
		self.p.display('NULL')
	
	def quit(self, event):
		self.p.close(0)


Mais à l'exécution de mon programme, celui-ci lève un exception.

Traceback (most recent call last):
File "C:/Users/Lucas/Desktop/Test_room_IMH_4/test/__init__.py", line 72, in <module>
Mywin(None,"Analysis")
File "C:/Users/Lucas/Desktop/Test_room_IMH_4/test/__init__.py", line 18, in __init__
self.SetMenuBar(c_menu.ControllerMenu(self))
File "C:\Users\Lucas\Desktop\Test_room_IMH_4\test\controller\Menu.py", line 16, in __init__
self.Append(fileMenu, 'File')
File "C:\Users\Lucas\AppData\Local\VLAB Works\vlab-2.4.2-vc100-x64\lib\site-packages\wx-3.0-msw\wx\_core.py", line 12270, in Append
return _core_.MenuBar_Append(*args, **kwargs)
TypeError: in method 'MenuBar_Append', expected argument 1 of type 'wxMenuBar *'


Je travaille avec Python 2.7, si quelqu'un a une solution, je le remercie d'avance.

--
Cordialement,
Faure Lucas.

1 réponse

  1. Bonjour.

    super(wx.MenuBar, self).__init__(parent)


    Il n'y a pas lieu de passer le parent à cette classe, puisque ce n'est pas un argument valide, le seul argument valable est le style.
    https://docs.wxpython.org/wx.MenuBar.html#wx.MenuBar.__init__

    Donc supprime cet argument, et pour relier ton MenuBar à ton parent, il faut utiliser la méthode SetMenuBar de ta Frame contenant ce widget.
    https://docs.wxpython.org/wx.Frame.html#wx.Frame.SetMenuBar
    1. Oui merci j'avais compris, x) le seul problème c'est qu'il me met une autre erreur si je met pas le parent dans le constructeur :

        File "C:\Users\Lucas\Desktop\Test_room_IMH_4\test\controller\Menu.py", line 10, in __init__
      super(wx.MenuBar, self).__init__()
      File "C:\Users\Lucas\AppData\Local\VLAB Works\vlab-2.4.2-vc100-x64\lib\site-packages\wx-3.0-msw\wx\_core.py", line 9145, in __init__
      _core_.Window_swiginit(self,_core_.new_Window(*args, **kwargs))
      TypeError: Required argument 'parent' (pos 1) not found
    2. @electrokingOui, et c'est normal.

      Dans super(), c'est le nom de ta propre classe qui doit être définie dedans, et non la ou les classes dont tu dérives.
      super(MyMenu, self).__init__()

      Qui fait la même chose que :
      wx.MenuBar.__init__(self)
    3. Ok merci, en fait c'est ce que je pensais a la base mais j'avais laissé l'argument parent dans le __init__().

      Tout mache correctement merci beaucoup.