- wxBufferedDC
- wxBufferedPaintDC
- wxPostScriptDC
- wxMemoryDC
- wxPrinterDC
- wxScreenDC
- wxClientDC
- wxPaintDC
- wxWindowDC
EVT_PAINT 和屏幕更新频率并无关系。
ClientDC 是最常用的,指 window 的 client 部分,也就是不带边框菜单工具栏状态栏的那部分。Window 则对应整个 window,screen 对应整个屏幕。
Buffered 版本指先缓冲到一个wx.Bitmap 中,所有画图操作都在这个缓冲中进行。当该 DC 销毁时,再一次性 repaint,这样就避免了闪烁。
如果不给 wxBufferedPaintDC 提供 Bitmap,则会自动创建一个临时 Bitmap,这时它是纯黑的背景,和client 是不一样的,client 有自己的前景和背景色。
事件:
wx.CloseEvent
wx.CommandEvent 各种控件触发的事件(按钮,菜单等)
wx.KeyEvent 键盘
wx.MouseEvent 鼠标
wx.PaintEvent
wx.SizeEvent 放大缩小窗口(会调整各种控件的位置)
wx.TimerEvent
EVT_CLOSE 点击关闭,Alt+F4,菜单关闭,或者 Close() 函数
EVT_PAINT
EVT_TIMER 定时器
EVT_KEY_DOWN 按键
EVT_BUTTON 按钮
Bind 时可以指定 source, 如果不指定 source,则对所有的源都有效。
Destory() 函数可以彻底关掉 window,可以在 OnClose 中调用
Timer: timer 事件发生的频率只和 timer 的频率有关,和处理该事件的函数所发费的时间没有关系。在下面的例子中,OnTimer 等待了1秒,但是显示的时间还是以2秒为间隔,也就是 timer 的频率。
import wx import time class ClockWindow(wx.Window): def __init__(self, parent): wx.Window.__init__(self, parent) self.Bind(wx.EVT_PAINT, self.OnPaint) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer) self.timer.Start(2000) def Draw(self, dc): t = time.localtime(time.time()) st = time.strftime("%I:%M:%S", t) w, h = self.GetClientSize() dc.SetBackground(wx.Brush(self.GetBackgroundColour())) dc.Clear() dc.SetFont(wx.Font(30, wx.SWISS, wx.NORMAL, wx.NORMAL)) tw, th = dc.GetTextExtent(st) dc.DrawText(st, (w-tw)/2, (h)/2 - th/2) def OnTimer(self, evt): dc = wx.BufferedDC(wx.ClientDC(self)) self.Draw(dc) time.sleep(1) print 'OnTimer' def OnPaint(self, evt): dc = wx.BufferedPaintDC(self) self.Draw(dc) print 'OnPaint' class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title="wx.Timer") ClockWindow(self) app = wx.PySimpleApp() frm = MyFrame() frm.Show() app.MainLoop()
1 comments:
這是一項有全球化事業的商機,
而且潛力無窮,任何人都可以去從事。
現在只要在家工作,越早加入就能越早贏得改變人生的機會。
請先免費 註冊體驗12周:
網址登入:
http://joe80411.weebly.com/
祝~天天都是有美好的一天˙快樂與您同在
Post a Comment