Wx menubar exception type error

Résolu
electroking Messages postés 236 Date d'inscription   Statut Membre Dernière intervention   -  
electroking Messages postés 236 Date d'inscription   Statut Membre Dernière intervention   -
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.

1 réponse

critou
 
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
0
electroking Messages postés 236 Date d'inscription   Statut Membre Dernière intervention   6
 
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
0
critou > electroking Messages postés 236 Date d'inscription   Statut Membre Dernière intervention  
 
Oui, 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)
0
electroking Messages postés 236 Date d'inscription   Statut Membre Dernière intervention   6
 
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.
0