J'=E9cris un programme dans lequel doivent d=E9filer automatiquement
quelques pages.
J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page")
sleep(5)
self.page2()
Quand j'ex=E9cute le programme, il me semble que la fonction sleep est
lanc=E9 avant la fin de SetLabel,
car le texte apparait tronqu=E9 (ex :Commentaires di).
Comment faire pour que SetLabel ait le temps de s'ex=E9cuter?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
hg
wrote:
Bonjour,
J'écris un programme dans lequel doivent défiler automatiquement quelques pages. J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page") sleep(5) self.page2()
Quand j'exécute le programme, il me semble que la fonction sleep est lancé avant la fin de SetLabel, car le texte apparait tronqué (ex :Commentaires di). Comment faire pour que SetLabel ait le temps de s'exécuter?
Merci de vos conseils
Jérôme
Bonjour,
Deux solutions à ma connaissance:
1) passer par un timer (à mon avis la bonne solution dans ton cas) 2) un thread.
hg
j.cormouls@neuf.fr wrote:
Bonjour,
J'écris un programme dans lequel doivent défiler automatiquement
quelques pages.
J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page")
sleep(5)
self.page2()
Quand j'exécute le programme, il me semble que la fonction sleep est
lancé avant la fin de SetLabel,
car le texte apparait tronqué (ex :Commentaires di).
Comment faire pour que SetLabel ait le temps de s'exécuter?
Merci de vos conseils
Jérôme
Bonjour,
Deux solutions à ma connaissance:
1) passer par un timer (à mon avis la bonne solution dans ton cas)
2) un thread.
J'écris un programme dans lequel doivent défiler automatiquement quelques pages. J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page") sleep(5) self.page2()
Quand j'exécute le programme, il me semble que la fonction sleep est lancé avant la fin de SetLabel, car le texte apparait tronqué (ex :Commentaires di). Comment faire pour que SetLabel ait le temps de s'exécuter?
Merci de vos conseils
Jérôme
Bonjour,
Deux solutions à ma connaissance:
1) passer par un timer (à mon avis la bonne solution dans ton cas) 2) un thread.
hg
jean-michel bain-cornu
Bonjour,
J'écris un programme dans lequel doivent défiler automatiquement quelques pages. J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page") sleep(5) self.page2()
Quand j'exécute le programme, il me semble que la fonction sleep est lancé avant la fin de SetLabel, car le texte apparait tronqué (ex :Commentaires di). Comment faire pour que SetLabel ait le temps de s'exécuter?
Si j'ai bien compris ton problème, ce n'est pas à proprement parler une question de temps d'exécution de SetLabel. Lorsque ton code s'exécute, wx ne raffraîchit pas parfaitement l'interface car il se pourrait que tu fasses d'autres modifications sur tes objets, et donc la mise à jour des objets sur l'écran pourrait être à la fois coûteuse en temps et inutile. Il attends donc que tu aie finis (le retour à MainLoop() en fait) avant de mettre à jour comme il faut.
Je reproduit ton problème avec : # -*- coding: iso-8859-1 -*- import wx,time class MainWindow(wx.Frame): def __init__(self,parent,id,title): wx.Frame.__init__(self,parent,wx.ID_ANY) self.sizer1 = wx.BoxSizer(wx.VERTICAL) bt= wx.Button(self,wx.ID_ANY,'Test') bt.Bind(wx.EVT_BUTTON,self.onButton) self.sizer1.Add(bt) self.texte= wx.StaticText(self,wx.ID_ANY,'valeur initiale') self.sizer1.Add(self.texte) self.SetSizer(self.sizer1) self.Show() self.i= 0 def onButton(self,event): self.i+= 1 self.texte.SetLabel('essai n°%s de modification du texte'%self.i) ## self.refresh() time.sleep(3) app = wx.PySimpleApp() frame=MainWindow(None,-1,'Test') app.MainLoop()
Il suffit de forcer un raffaichissement pour obtenir le comportement souhaité* (self.refresh() dans l'exemple)
A+ jm
* et non pas : le con porc te ment sous étai Bin koi, c'est vendredi non ?
Bonjour,
J'écris un programme dans lequel doivent défiler automatiquement
quelques pages.
J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page")
sleep(5)
self.page2()
Quand j'exécute le programme, il me semble que la fonction sleep est
lancé avant la fin de SetLabel,
car le texte apparait tronqué (ex :Commentaires di).
Comment faire pour que SetLabel ait le temps de s'exécuter?
Si j'ai bien compris ton problème, ce n'est pas à proprement parler une
question de temps d'exécution de SetLabel. Lorsque ton code s'exécute,
wx ne raffraîchit pas parfaitement l'interface car il se pourrait que tu
fasses d'autres modifications sur tes objets, et donc la mise à jour des
objets sur l'écran pourrait être à la fois coûteuse en temps et inutile.
Il attends donc que tu aie finis (le retour à MainLoop() en fait) avant
de mettre à jour comme il faut.
Je reproduit ton problème avec :
# -*- coding: iso-8859-1 -*-
import wx,time
class MainWindow(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,wx.ID_ANY)
self.sizer1 = wx.BoxSizer(wx.VERTICAL)
bt= wx.Button(self,wx.ID_ANY,'Test')
bt.Bind(wx.EVT_BUTTON,self.onButton)
self.sizer1.Add(bt)
self.texte= wx.StaticText(self,wx.ID_ANY,'valeur initiale')
self.sizer1.Add(self.texte)
self.SetSizer(self.sizer1)
self.Show()
self.i= 0
def onButton(self,event):
self.i+= 1
self.texte.SetLabel('essai n°%s de modification du texte'%self.i)
## self.refresh()
time.sleep(3)
app = wx.PySimpleApp()
frame=MainWindow(None,-1,'Test')
app.MainLoop()
Il suffit de forcer un raffaichissement pour obtenir le comportement
souhaité* (self.refresh() dans l'exemple)
A+
jm
* et non pas : le con porc te ment sous étai
Bin koi, c'est vendredi non ?
J'écris un programme dans lequel doivent défiler automatiquement quelques pages. J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page") sleep(5) self.page2()
Quand j'exécute le programme, il me semble que la fonction sleep est lancé avant la fin de SetLabel, car le texte apparait tronqué (ex :Commentaires di). Comment faire pour que SetLabel ait le temps de s'exécuter?
Si j'ai bien compris ton problème, ce n'est pas à proprement parler une question de temps d'exécution de SetLabel. Lorsque ton code s'exécute, wx ne raffraîchit pas parfaitement l'interface car il se pourrait que tu fasses d'autres modifications sur tes objets, et donc la mise à jour des objets sur l'écran pourrait être à la fois coûteuse en temps et inutile. Il attends donc que tu aie finis (le retour à MainLoop() en fait) avant de mettre à jour comme il faut.
Je reproduit ton problème avec : # -*- coding: iso-8859-1 -*- import wx,time class MainWindow(wx.Frame): def __init__(self,parent,id,title): wx.Frame.__init__(self,parent,wx.ID_ANY) self.sizer1 = wx.BoxSizer(wx.VERTICAL) bt= wx.Button(self,wx.ID_ANY,'Test') bt.Bind(wx.EVT_BUTTON,self.onButton) self.sizer1.Add(bt) self.texte= wx.StaticText(self,wx.ID_ANY,'valeur initiale') self.sizer1.Add(self.texte) self.SetSizer(self.sizer1) self.Show() self.i= 0 def onButton(self,event): self.i+= 1 self.texte.SetLabel('essai n°%s de modification du texte'%self.i) ## self.refresh() time.sleep(3) app = wx.PySimpleApp() frame=MainWindow(None,-1,'Test') app.MainLoop()
Il suffit de forcer un raffaichissement pour obtenir le comportement souhaité* (self.refresh() dans l'exemple)
A+ jm
* et non pas : le con porc te ment sous étai Bin koi, c'est vendredi non ?
j.cormouls
On 11 mai, 17:37, jean-michel bain-cornu wrote:
Bonjour,
J'écris un programme dans lequel doivent défiler automatiquement quelques pages. J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page") sleep(5) self.page2()
Quand j'exécute le programme, il me semble que la fonction sleep est lancé avant la fin de SetLabel, car le texte apparait tronqué (ex :Commentaires di). Comment faire pour que SetLabel ait le temps de s'exécuter?
Si j'ai bien compris ton problème, ce n'est pas à proprement parler u ne question de temps d'exécution de SetLabel. Lorsque ton code s'exécute, wx ne raffraîchit pas parfaitement l'interface car il se pourrait que tu fasses d'autres modifications sur tes objets, et donc la mise à jour des objets sur l'écran pourrait être à la fois coûteuse en temps et i nutile. Il attends donc que tu aie finis (le retour à MainLoop() en fait) avant de mettre à jour comme il faut.
Je reproduit ton problème avec : # -*- coding: iso-8859-1 -*- import wx,time class MainWindow(wx.Frame): def __init__(self,parent,id,title): wx.Frame.__init__(self,parent,wx.ID_ANY) self.sizer1 = wx.BoxSizer(wx.VERTICAL) bt= wx.Button(self,wx.ID_ANY,'Test') bt.Bind(wx.EVT_BUTTON,self.onButton) self.sizer1.Add(bt) self.texte= wx.StaticText(self,wx.ID_ANY,'valeur initiale') self.sizer1.Add(self.texte) self.SetSizer(self.sizer1) self.Show() self.i= 0 def onButton(self,event): self.i+= 1 self.texte.SetLabel('essai n°%s de modification du texte'%self .i) ## self.refresh() time.sleep(3) app = wx.PySimpleApp() frame=MainWindow(None,-1,'Test') app.MainLoop()
Il suffit de forcer un raffaichissement pour obtenir le comportement souhaité* (self.refresh() dans l'exemple)
A+ jm
* et non pas : le con porc te ment sous étai Bin koi, c'est vendredi non ?
Merci pour ta réponse, mais je ne comprends pas bien le fonctionnement de refresh(): Quand je teste ton programme, sans cette fonction, on retrouve bien le problème que j'évoquais (setlabel incomplet), mais quand on introduit refresh(), sleep() ne fonctionne plus !!!! A+ jerome
On 11 mai, 17:37, jean-michel bain-cornu <pythonn...@nospam.jmbc.fr>
wrote:
Bonjour,
J'écris un programme dans lequel doivent défiler automatiquement
quelques pages.
J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page")
sleep(5)
self.page2()
Quand j'exécute le programme, il me semble que la fonction sleep est
lancé avant la fin de SetLabel,
car le texte apparait tronqué (ex :Commentaires di).
Comment faire pour que SetLabel ait le temps de s'exécuter?
Si j'ai bien compris ton problème, ce n'est pas à proprement parler u ne
question de temps d'exécution de SetLabel. Lorsque ton code s'exécute,
wx ne raffraîchit pas parfaitement l'interface car il se pourrait que tu
fasses d'autres modifications sur tes objets, et donc la mise à jour des
objets sur l'écran pourrait être à la fois coûteuse en temps et i nutile.
Il attends donc que tu aie finis (le retour à MainLoop() en fait) avant
de mettre à jour comme il faut.
Je reproduit ton problème avec :
# -*- coding: iso-8859-1 -*-
import wx,time
class MainWindow(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,wx.ID_ANY)
self.sizer1 = wx.BoxSizer(wx.VERTICAL)
bt= wx.Button(self,wx.ID_ANY,'Test')
bt.Bind(wx.EVT_BUTTON,self.onButton)
self.sizer1.Add(bt)
self.texte= wx.StaticText(self,wx.ID_ANY,'valeur initiale')
self.sizer1.Add(self.texte)
self.SetSizer(self.sizer1)
self.Show()
self.i= 0
def onButton(self,event):
self.i+= 1
self.texte.SetLabel('essai n°%s de modification du texte'%self .i)
## self.refresh()
time.sleep(3)
app = wx.PySimpleApp()
frame=MainWindow(None,-1,'Test')
app.MainLoop()
Il suffit de forcer un raffaichissement pour obtenir le comportement
souhaité* (self.refresh() dans l'exemple)
A+
jm
* et non pas : le con porc te ment sous étai
Bin koi, c'est vendredi non ?
Merci pour ta réponse, mais je ne comprends pas bien le fonctionnement
de refresh():
Quand je teste ton programme, sans cette fonction, on retrouve bien le
problème que j'évoquais (setlabel incomplet),
mais quand on introduit refresh(), sleep() ne fonctionne plus !!!!
A+
jerome
J'écris un programme dans lequel doivent défiler automatiquement quelques pages. J'utilise un code du type :
def page1(self):
self.dd.SetLabel("Commentaires divers sur la page") sleep(5) self.page2()
Quand j'exécute le programme, il me semble que la fonction sleep est lancé avant la fin de SetLabel, car le texte apparait tronqué (ex :Commentaires di). Comment faire pour que SetLabel ait le temps de s'exécuter?
Si j'ai bien compris ton problème, ce n'est pas à proprement parler u ne question de temps d'exécution de SetLabel. Lorsque ton code s'exécute, wx ne raffraîchit pas parfaitement l'interface car il se pourrait que tu fasses d'autres modifications sur tes objets, et donc la mise à jour des objets sur l'écran pourrait être à la fois coûteuse en temps et i nutile. Il attends donc que tu aie finis (le retour à MainLoop() en fait) avant de mettre à jour comme il faut.
Je reproduit ton problème avec : # -*- coding: iso-8859-1 -*- import wx,time class MainWindow(wx.Frame): def __init__(self,parent,id,title): wx.Frame.__init__(self,parent,wx.ID_ANY) self.sizer1 = wx.BoxSizer(wx.VERTICAL) bt= wx.Button(self,wx.ID_ANY,'Test') bt.Bind(wx.EVT_BUTTON,self.onButton) self.sizer1.Add(bt) self.texte= wx.StaticText(self,wx.ID_ANY,'valeur initiale') self.sizer1.Add(self.texte) self.SetSizer(self.sizer1) self.Show() self.i= 0 def onButton(self,event): self.i+= 1 self.texte.SetLabel('essai n°%s de modification du texte'%self .i) ## self.refresh() time.sleep(3) app = wx.PySimpleApp() frame=MainWindow(None,-1,'Test') app.MainLoop()
Il suffit de forcer un raffaichissement pour obtenir le comportement souhaité* (self.refresh() dans l'exemple)
A+ jm
* et non pas : le con porc te ment sous étai Bin koi, c'est vendredi non ?
Merci pour ta réponse, mais je ne comprends pas bien le fonctionnement de refresh(): Quand je teste ton programme, sans cette fonction, on retrouve bien le problème que j'évoquais (setlabel incomplet), mais quand on introduit refresh(), sleep() ne fonctionne plus !!!! A+ jerome
jean-michel bain-cornu
Merci pour ta réponse, mais je ne comprends pas bien le fonctionnement de refresh(): Quand je teste ton programme, sans cette fonction, on retrouve bien le problème que j'évoquais (setlabel incomplet), mais quand on introduit refresh(), sleep() ne fonctionne plus !!!!
Oui, c'est parce que je t'ai posté une grosse bêtise. Le refresh s'écrit Refresh() avec un R, et le refresh() avec un r étant inconnu, le programme ne va pas plus loin. L'exception étant trappée par wx, ça ne se voit pas facilement.
Raaa ; il faut que je trouve autre chose...
Merci pour ta réponse, mais je ne comprends pas bien le fonctionnement
de refresh():
Quand je teste ton programme, sans cette fonction, on retrouve bien le
problème que j'évoquais (setlabel incomplet),
mais quand on introduit refresh(), sleep() ne fonctionne plus !!!!
Oui, c'est parce que je t'ai posté une grosse bêtise.
Le refresh s'écrit Refresh() avec un R, et le refresh() avec un r étant
inconnu, le programme ne va pas plus loin. L'exception étant trappée par
wx, ça ne se voit pas facilement.
Merci pour ta réponse, mais je ne comprends pas bien le fonctionnement de refresh(): Quand je teste ton programme, sans cette fonction, on retrouve bien le problème que j'évoquais (setlabel incomplet), mais quand on introduit refresh(), sleep() ne fonctionne plus !!!!
Oui, c'est parce que je t'ai posté une grosse bêtise. Le refresh s'écrit Refresh() avec un R, et le refresh() avec un r étant inconnu, le programme ne va pas plus loin. L'exception étant trappée par wx, ça ne se voit pas facilement.
Raaa ; il faut que je trouve autre chose...
jean-michel bain-cornu
Raaa ; il faut que je trouve autre chose...
Effectivement, ça va beaucoup mieux avec un timer (merci hg) !