Wx menubar exception type error

Résolu/Fermé
Signaler
Messages postés
234
Date d'inscription
dimanche 14 septembre 2014
Statut
Membre
Dernière intervention
22 juin 2021
-
Messages postés
234
Date d'inscription
dimanche 14 septembre 2014
Statut
Membre
Dernière intervention
22 juin 2021
-
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

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
Messages postés
234
Date d'inscription
dimanche 14 septembre 2014
Statut
Membre
Dernière intervention
22 juin 2021
7
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
>
Messages postés
234
Date d'inscription
dimanche 14 septembre 2014
Statut
Membre
Dernière intervention
22 juin 2021

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)
Messages postés
234
Date d'inscription
dimanche 14 septembre 2014
Statut
Membre
Dernière intervention
22 juin 2021
7
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.