[Python] Problème de script wxPython

Résolu/Fermé
coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 - 11 mai 2011 à 22:03
coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 - 12 mai 2011 à 16:32
Bonjour,

Je commence tout juste à apprendre le Python. Après avoir lu un peu sur les choses de bases (manipulations de strings, de nombres, etc.) je me suis lancé dans les modules externes, et mon premier objectif est de comprendre le wxPython.

Alors voilà : je suis les instructions sur cette page pour commencer avec des exemples à l'appui. Mais arrivé au Improving the layout - Using Sizers, j'essaie de copier-coller le script, mais quand je l'essaie, il ne fonctionne pas. Ça me sort une erreur, exemple :
File "diceroller.pyw", line 22, in __init__
self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)
AttributeError: 'ExamplePanel' object has no attribute 'OnClick'


J'en comprends évidemment que le script le reconnaît pas l'événement OnClick, mais comment cela se peut-il, venant d'un script qui est sensé fonctionner à peu près dans l'absolu ?

Voici le code complet de mon fichier.
import sys
import os
import wx

class ExamplePanel(wx.Panel):
	def __init__(self, parent):
		wx.Panel.__init__(self, parent)

		# create some sizers
		mainSizer = wx.BoxSizer(wx.VERTICAL)
		grid = wx.GridBagSizer(hgap=5, vgap=5)
		hSizer = wx.BoxSizer(wx.HORIZONTAL)

		self.quote = wx.StaticText(self, label="Your quote: ")
		grid.Add(self.quote, pos=(0,0))

		# A multiline TextCtrl - This is here to show how the events work in this program, don't pay too much attention to it
		self.logger = wx.TextCtrl(self, size=(300,200), style=wx.TE_MULTILINE | wx.TE_READONLY)

		# A button
		self.button =wx.Button(self, label="Save")
		#self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)

		# the edit control - one line version.
		self.lblname = wx.StaticText(self, label="Your name :")
		grid.Add(self.lblname, pos=(1,0))
		self.editname = wx.TextCtrl(self, value="Enter here your name", size=(140,-1))
		grid.Add(self.editname, pos=(1,1))
		#self.Bind(wx.EVT_TEXT, self.EvtText, self.editname)
		#self.Bind(wx.EVT_CHAR, self.EvtChar, self.editname)

		# the combobox Control
		self.sampleList = ['friends', 'advertising', 'web search', 'Yellow Pages']
		self.lblhear = wx.StaticText(self, label="How did you hear from us ?")
		grid.Add(self.lblhear, pos=(3,0))
		self.edithear = wx.ComboBox(self, size=(95, -1), choices=self.sampleList, style=wx.CB_DROPDOWN)
		grid.Add(self.edithear, pos=(3,1))
		#self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, self.edithear)
		#self.Bind(wx.EVT_TEXT, self.EvtText,self.edithear)

		# add a spacer to the sizer
		grid.Add((10, 40), pos=(2,0))

		# Checkbox
		self.insure = wx.CheckBox(self, label="Do you want Insured Shipment ?")
		grid.Add(self.insure, pos=(4,0), span=(1,2), flag=wx.BOTTOM, border=5)
		#self.Bind(wx.EVT_CHECKBOX, self.EvtCheckBox, self.insure)

		# Radio Boxes
		radioList = ['blue', 'red', 'yellow', 'orange', 'green', 'purple', 'navy blue', 'black', 'gray']
		rb = wx.RadioBox(self, label="What color would you like ?", pos=(20, 210), choices=radioList,  majorDimension=3,
						 style=wx.RA_SPECIFY_COLS)
		grid.Add(rb, pos=(5,0), span=(1,2))
		#self.Bind(wx.EVT_RADIOBOX, self.EvtRadioBox, rb)

		hSizer.Add(grid, 0, wx.ALL, 5)
		hSizer.Add(self.logger)
		mainSizer.Add(hSizer, 0, wx.ALL, 5)
		mainSizer.Add(self.button, 0, wx.CENTER)
		self.SetSizerAndFit(mainSizer)

app = wx.App(False)
frame = wx.Frame(None)
panel = ExamplePanel(frame)
frame.Show()
app.MainLoop()


J'ai mis en commentaire les instructions qui posaient problème. Comme c'est là, le programme va s'ouvrir, mais ne fera rien.

Merci à quiconque pourra m'orienter !!!


A voir également:

1 réponse

coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
12 mai 2011 à 16:32
J'ai trouvé la solution.

Toutes les lignes qui ne fonctionnaient pas devaient appeler des fonctions (self.EvtText, self.EvtChar, etc.) qui étaient absentes de mon code. J'avais assumé que, par exemple, self.EvtText était une fonction built-in de wxPython qui n'avait pas besoin d'être définie.

J'ai trouvé les fonctions nécessaires dans l'exercice précédent du tutoriel où j'ai pris le reste de mon code.

Donc merci à tous ceux qui ont répondu ! :-P
Bonne journée !
0