Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

wxPython refresh

5 réponses
Avatar
Ali
Bonjour

j'ai un petit problème avec une appliaction python qui utilise wxpython.
Concrétement, un thread de calcul appel cette méthode :
def paint(self, blues):
self.frame.blues = blues
self.frame.Refresh(True)

et la fonction on_paint du frame est sensé faire les dessins. Le problème,
c'est que les dessins ne sont raffraîchi que si je bouge la souris sur la
fenêtre de l'application, alors que je pensais qu'en appelant le
frame.Refresh(True), ça allait se faire automatiquement.

Quelqu'un peut m'aider?

5 réponses

Avatar
francois
On Jun 26, 12:49 pm, Ali wrote:
Bonjour

j'ai un petit problème avec une appliaction python qui utilise wxpython.
Concrétement, un thread de calcul appel cette méthode :
def paint(self, blues):
self.frame.blues = blues
self.frame.Refresh(True)

et la fonction on_paint du frame est sensé faire les dessins. Le probl ème,
c'est que les dessins ne sont raffraîchi que si je bouge la souris sur la
fenêtre de l'application, alors que je pensais qu'en appelant le
frame.Refresh(True), ça allait se faire automatiquement.

Quelqu'un peut m'aider?


Normalement les opérations sur la GUI doivent se faire dans le thread
principal (sous Linux pas mal de librairies ne sont pas thread-safe).

Il a des explications dans le livre "WxPython in Action" p 539
"Creating a multithreaded wxPython application"

Pour ma part j'utilise donc des CallAfter:

http://wiki.wxpython.org/CallAfter

francois

Avatar
Ali
On Tue, 26 Jun 2007 14:02:47 +0000, francois wrote:

Normalement les opérations sur la GUI doivent se faire dans le thread
principal (sous Linux pas mal de librairies ne sont pas thread-safe).

Il a des explications dans le livre "WxPython in Action" p 539
"Creating a multithreaded wxPython application"

Pour ma part j'utilise donc des CallAfter:

http://wiki.wxpython.org/CallAfter

francois


o/
Merci beaucoup!

Avatar
hg
francois wrote:

On Jun 26, 12:49 pm, Ali wrote:
Bonjour

j'ai un petit problème avec une appliaction python qui utilise wxpython.
Concrétement, un thread de calcul appel cette méthode :
def paint(self, blues):
self.frame.blues = blues
self.frame.Refresh(True)

et la fonction on_paint du frame est sensé faire les dessins. Le
problème, c'est que les dessins ne sont raffraîchi que si je bouge la
souris sur la fenêtre de l'application, alors que je pensais qu'en
appelant le frame.Refresh(True), ça allait se faire automatiquement.

Quelqu'un peut m'aider?


Normalement les opérations sur la GUI doivent se faire dans le thread
principal (sous Linux pas mal de librairies ne sont pas thread-safe).

Il a des explications dans le livre "WxPython in Action" p 539
"Creating a multithreaded wxPython application"

Pour ma part j'utilise donc des CallAfter:

http://wiki.wxpython.org/CallAfter

francois


Essaye un wx.Timer avec Refresh dans le thread principal.

hg


Avatar
NicolasP
Bonjour

j'ai un petit problème avec une appliaction python qui utilise wxpython.
Concrétement, un thread de calcul appel cette méthode :
def paint(self, blues):
self.frame.blues = blues
self.frame.Refresh(True)

et la fonction on_paint du frame est sensé faire les dessins. Le problème,
c'est que les dessins ne sont raffraîchi que si je bouge la souris sur la
fenêtre de l'application, alors que je pensais qu'en appelant le
frame.Refresh(True), ça allait se faire automatiquement.

Quelqu'un peut m'aider?


Pour ma part, j'utilise wx.PostEvent pour evoyer des évènements au thread principal (celui qui gère l'affichage) à partir des threads "travailleurs".

Je peux poster un exemple si nécessaire (c'est un petit peu long).

Nicolas

Avatar
Ali
On Wed, 27 Jun 2007 09:18:12 +0200, NicolasP wrote:


Pour ma part, j'utilise wx.PostEvent pour evoyer des évènements au thread principal
(celui qui gère l'affichage) à partir des threads "travailleurs".


Le callAfter semble avoir résolu le problème. Mais c'est bon à savoir.
Merci :)