Wxpython 我想给画的画一个事件
我想为我画的画举办一个活动 现在,我用wxPython绘制矩形 我想连接像按钮一样的链接 可能吗 如果可能的话,请给我一些建议 下面是我的代码 import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title, size=(350, 280)) self.Bind(wx.EVT_PAINT, self.OnPaint) self.Centre() self.Show() def OnPaint(self, e): dc = wx.ClientDC(self) dc.SetBrush(wx.Brush("YELLOW")) self.original = dc.DrawRectangle(10, 15, 90, 60) if __name__ == '__main__': app = wx.App() Example(None, 'Colours') app.MainLoop() 导入wx 类示例(wx.Frame): 定义初始(自我、父母、头衔): super(例如,self)。\uuuuu init\uuuuuuu(父级,title=title, 大小=(350280)) self.Bind(wx.EVT_-PAINT,self.OnPaint) 自我中心() self.Show() def OnPaint(自我,e): dc=wx.ClientDC(自) 直流立根刷(wx刷(“黄色”)) self.original=dc.DrawRectangle(10,15,90,60) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=wx.app() 示例(无,“颜色”) app.MainLoop()Wxpython 我想给画的画一个事件,wxpython,Wxpython,我想为我画的画举办一个活动 现在,我用wxPython绘制矩形 我想连接像按钮一样的链接 可能吗 如果可能的话,请给我一些建议 下面是我的代码 import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title, size=(350, 280)) self.
当您第一次看到这一点时,当按下按钮时,很容易调用OnPaint方法。但这不会按你想要的方式工作 关于绘图的一个重要问题是,每次需要重新绘制屏幕时,都需要调用OnPaint事件处理程序——显然。这意味着您需要绘制的逻辑在任何时候都对它有用,因此可以随时调用它。你不能只按一次按钮就画出某样东西,并期望它保持绘制状态——下一次绘制事件会将其擦除 这意味着您需要这样的逻辑:
import wx
class Example(wx.Frame):
def __init__(self, parent, title):
super(Example, self).__init__(parent, title=title,
size=(350, 280))
self._showRectangle = False
draw_button = wx.Button(self, label="Press Me")
self.Bind(wx.EVT_BUTTON, self.OnButtonPressed, draw_button)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Centre()
self.Show()
def OnButtonPressed(self, e):
self._showRectangle = not(self._showRectangle)
def OnPaint(self, e):
# This must be called from EVT_PAINT, not EVT_BUTTON
print "painting..."
if self._showRectangle:
dc = wx.ClientDC(self)
dc.SetBrush(wx.Brush("YELLOW"))
self.original = dc.DrawRectangle(10, 15, 90, 60)
app = wx.App()
Example(None, 'Colours')
app.MainLoop()
我在那里放了一个print语句,以强调需要理解何时调用这个处理程序。尝试最小化和最大化应用程序,等等
HTH注意:
您不希望在绘制事件中使用ClientDC!您可以使用PaintDC
当系统需要重新绘制窗口时,甚至会出现绘制。因此,您要做的是:
- 在类中存储窗口的状态
- 在绘制处理程序中,构造一个PaintDC,并使用对象的状态绘制希望窗口的外观
- 如果希望由于系统绘制事件以外的其他事件而更新窗口的外观,请调用: self.Refresh() self.Update()