473,375 Members | 1,348 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,375 software developers and data experts.

wxPython - drawing without paint event

I've got a wxPython program that needs to do some drawing on a DC on a
regular basis, whether or not a paint event happens. I know how to
make a ClientDC to do the drawing in, and I know what drawing calls to
make. But how do I make it all happen? After I call MainLoop, none of
my code gets called unless there is an event. And there is no event,
so my code doesn't get called. What do I do?

Aug 10 '07 #1
12 6267
On Aug 9, 7:46 pm, Matt Bitten <mbitte...@yahoo.comwrote:
I've got a wxPython program that needs to do some drawing on a DC on a
regular basis.... And there is no event,
so my code doesn't get called. What do I do?
Then the event is: "on a regular basis", i.e. the passage of time.
You can use a wx.Timer to create events at regular intervals, which
your code can respond to:

-------
import wx

class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "My Window")

panel = wx.Panel(self, -1)
self.text = wx.StaticText(panel, -1, "hello", pos=(40, 40) )

self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.on_timer_event)
self.timer.Start(milliseconds=1000, oneShot=False)

def on_timer_event(self, event):
if self.text.GetLabel() == "hello":
self.text.SetLabel("goodbye")
else:
self.text.SetLabel("hello")
app = wx.App(redirect=False)

win = MyFrame()
win.Show()

app.MainLoop()
----------------

Make sure you save the timer in self so that you have a permanent
reference to the object, otherwise the timer will be destroyed when
__init_ returns.


Aug 10 '07 #2
On Aug 10, 1:40 am, 7stud <bbxx789_0...@yahoo.comwrote:
On Aug 9, 7:46 pm, Matt Bitten <mbitte...@yahoo.comwrote:
I've got a wxPython program that needs to do some drawing on a DC on a
regular basis.... And there is no event,
so my code doesn't get called. What do I do?

Then the event is: "on a regular basis", i.e. the passage of time.
You can use a wx.Timer to create events at regular intervals, which
your code can respond to:
...
Thanks!

On a related topic, it seems like it would be nice to do *all* drawing
in
response to paint events. When I get an event from the timer, I would
just tell wx that part of the window needs redrawing, and depend on it
to give me a paint even when nothing of higher priority needs to be
done.
I've seen this kind of logic recommended in other GUI tookits. Is it a
good idea in wxPython, and, if so, how does one do it?

Aug 11 '07 #3
gl************@gmail.com wrote:
On a related topic, it seems like it would be nice to do *all*
drawing in
response to paint events. When I get an event from the timer, I
would just tell wx that part of the window needs redrawing, and
depend on it to give me a paint even when nothing of higher
priority needs to be done.
I've seen this kind of logic recommended in other GUI tookits. Is
it a good idea in wxPython, and, if so, how does one do it?
At least it is not required -- there are device contexts for use
inside and outside of paint events.

One nice strategy from an example in "wxPython in Action" is the
following:

* the frame has Draw methods that draw into a BufferedDC, which is
chained to a bitmap member

* inside the paint method, the bitmap member is drawn to screen

Regards,
Björn

--
BOFH excuse #393:

Interference from the Van Allen Belt.

Aug 11 '07 #4
On Aug 11, 3:31 am, Bjoern Schliessmann <usenet-
mail-0306.20.chr0n...@spamgourmet.comwrote:
glenn.chapp...@gmail.com wrote:
On a related topic, it seems like it would be nice to do *all*
drawing in
response topaintevents. When I get aneventfrom the timer, I
would just tell wx that part of the window needs redrawing, and
depend on it to give me apainteven when nothing of higher
priority needs to be done.

One nice strategy from an example in "wxPython in Action" is the
following:

* the frame has Draw methods that draw into a BufferedDC, which is
chained to a bitmap member

* inside thepaintmethod, the bitmap member is drawn to screen
Okay, but how do I tell wx that it needs to send me a paint event?

Aug 12 '07 #5
On Aug 11, 7:59 pm, glenn.chapp...@gmail.com wrote:
On Aug 11, 3:31 am, Bjoern Schliessmann <usenet-

mail-0306.20.chr0n...@spamgourmet.comwrote:
glenn.chapp...@gmail.com wrote:
On a related topic, it seems like it would be nice to do *all*
drawing in
response topaintevents. When I get aneventfrom the timer, I
would just tell wx that part of the window needs redrawing, and
depend on it to give me apainteven when nothing of higher
priority needs to be done.
One nice strategy from an example in "wxPython in Action" is the
following:
* the frame has Draw methods that draw into a BufferedDC, which is
chained to a bitmap member
* inside thepaintmethod, the bitmap member is drawn to screen

Okay, but how do I tell wx that it needs to send me a paint event?
Try this:

--------------
import wx

class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "My Window")

panel = wx.Panel(self, -1)
self.text = wx.StaticText(panel, -1, "hello", pos=(40, 40) )

self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.on_timer_event)
self.timer.Start(milliseconds=1000, oneShot=False)

self.Bind(wx.EVT_PAINT, self.on_paint)

def on_timer_event(self, event):
self.GetEventHandler().ProcessEvent(wx.PaintEvent( ))

def on_paint(self, event):
print "execution entered on_paint"

app = wx.App(redirect=False)

win = MyFrame()
win.Show()

app.MainLoop()
------------

I'm not sure why the call should be
self.GetEventHandler().ProcessEvent() instead of just
self.ProcessEvent().

Aug 12 '07 #6
gl************@gmail.com wrote:
Okay, but how do I tell wx that it needs to send me a paint event?
It will send it on its own. You just need to bind your OnPaint (or
similar) method to it like 7stud demonstrates.

I really recommend reading "wxPython in Action", or at least the
tutorial.

Regards,
Björn

--
BOFH excuse #273:

The cord jumped over and hit the power switch.

Aug 12 '07 #7
On Aug 12, 6:06 am, Bjoern Schliessmann <usenet-
mail-0306.20.chr0n...@spamgourmet.comwrote:
I really recommend reading "wxPython in Action", or at least the
tutorial.
I don't. "wxPython in Action" is by far the worst computer book I've
ever purchased. It's poorly organized, poorly written, and full of
mistakes--and it's expensive. The fact that the authors foist that
piece of junk on unsuspecting newbies is a crime.

Aug 12 '07 #8
On Aug 12, 2:20 pm, Bjoern Schliessmann <usenet-
mail-0306.20.chr0n...@spamgourmet.comwrote:
But any suggestions what's
better for a beginner? The (incomplete) tutorial surely not.
Another GUI toolkit.
Aug 12 '07 #9
7stud wrote:
On Aug 12, 2:20 pm, Bjoern Schliessmann <usenet-
>But any suggestions what's
better for a beginner? The (incomplete) tutorial surely not.
Another GUI toolkit.
So it seems your dislike is not for the book, but for the toolkit.

Regards,
Björn

--
BOFH excuse #414:

tachyon emissions overloading the system

Aug 12 '07 #10
ky******@gmail.com wrote:
While the book does have issues, it is better (in my opinion) than
the only published Tkinter book, although both books are now
outdated.
Outdated to a certain limit. It's quite a bit more recent than those
many tutorials around still today using
"from wxpython.wx import *".
As with all programming, if you don't practice, you won't learn.
True.

Regards,
Björn

--
BOFH excuse #103:

operators on strike due to broken coffee machine

Aug 13 '07 #11
On Aug 13, 3:15 pm, Bjoern Schliessmann <usenet-
mail-0306.20.chr0n...@spamgourmet.comwrote:
kyoso...@gmail.com wrote:
While the book does have issues, it is better (in my opinion) than
the only published Tkinter book, although both books are now
outdated.

Outdated to a certain limit. It's quite a bit more recent than those
many tutorials around still today using
"from wxpython.wx import *".
As with all programming, if you don't practice, you won't learn.

True.

Regards,

Björn

--
BOFH excuse #103:

operators on strike due to broken coffee machine
I guess I haven't looked up any wxPython tutorials. I typically use a
combination of the wxPython wiki, the demo and the WIA book for my
work.

Mike

Aug 13 '07 #12
ky******@gmail.com wrote:
I guess I haven't looked up any wxPython tutorials. I typically
use a combination of the wxPython wiki, the demo and the WIA book
for my work.
Me too (except the mailing list, occasionally), and it works quite
well.

Regards,
Björn

--
BOFH excuse #306:

CPU-angle has to be adjusted because of vibrations coming from the
nearby road

Aug 13 '07 #13

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: Rene | last post by:
Currently, the paint even will only acknowledge painting going on inside of the ClipRectangle, any of the drawing that is outside of the ClipRectangle is ignored. How can I get the paint...
7
by: Schorschi | last post by:
I know there is a way to do this, but I don't know how. Via a custom event? I have some code that I only want to run during a paint event. I could build a form instance that has the code and...
5
by: active | last post by:
This is what I do in a PictureBox New: b1 = New Drawing.Bitmap(Width, Height, Me.CreateGraphics()) g1 = Graphics.FromImage(b1) Someplace I do g1.DrawString.........
4
by: Aaron Smith | last post by:
I have a panel that I have in the paint event to draw a Raised 3d border around it.. The problem is, if a msgbox is popped up or a tooltip is displayed, it leaves lines on the panel. I've tried...
7
by: Dennis | last post by:
I am trying to implement drawing on a bitmap and using bitblt to transfer it to the control graphics object in the paint event. It seems to draw on the bitmap ok but doesn't get transferred to the...
1
by: edi sol | last post by:
Hi, I have a user control and panel in this control. I write a paint event of the panel control. When I strat the application (windows form with this control only) the paint event executes twice....
4
by: Sam | last post by:
Hai, I use a paintbox paint event to draw some images in a paintbox. I call the paint event by refreshing the paintbox using paintboxname.refresh() or paintboxname.update(). Problem with this...
1
by: ehabzaky | last post by:
Hi, I'm using some low level Win 32 API for some drawing functions on a picture box. I'm putting the drawing code in a method and call this method from the picture box paint event. The...
4
by: Kürþat | last post by:
Hi all, I do some drawing in a form's paint event handler and I have a button on that form. Whenever the mouse enters or leaves the button Form's paint event occurs. Isn't that a strange...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.