Wx menubar exception type error

Résolu/Fermé
electroking Messages postés 236 Date d'inscription dimanche 14 septembre 2014 Statut Membre Dernière intervention 22 juin 2021 - 9 mai 2018 à 09:49
electroking Messages postés 236 Date d'inscription dimanche 14 septembre 2014 Statut Membre Dernière intervention 22 juin 2021 - 9 mai 2018 à 13:20
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
0
electroking Messages postés 236 Date d'inscription dimanche 14 septembre 2014 Statut Membre Dernière intervention 22 juin 2021 6
9 mai 2018 à 11:55
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 dimanche 14 septembre 2014 Statut Membre Dernière intervention 22 juin 2021
9 mai 2018 à 12:38
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 dimanche 14 septembre 2014 Statut Membre Dernière intervention 22 juin 2021 6
9 mai 2018 à 13:20
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