2013-05-06 120 views
0
import wx 
app=wx.App() 
dc=wx.ScreenDC() 
dc.DrawLine(100,100,500,500) 
dc.Clear() 

我只是在屏幕上画画,而不是创建框架和画框。如何在wxpython中清除屏幕上的图形?

该行出现,但dc.Clear()没有影响。而我找不到Refresh()直流。

请告诉我如何清除该行?

回答

0

首先,阅读本手册: http://wiki.wxpython.org/Getting%20Started

东西沿着线:

import wx 
app=wx.App() 
dc=wx.ScreenDC() 
panel = wx.Panel(self) 
dc.DrawLine(100,100,500,500) 
dc.Clear() 

# and then 
dc.Refresh() 

app.MainLoop() 

clear()只有 “删除” 从下一个项目渲染批次。 这不是直到调用Refresh()这些指令被发送到渲染内存(非技术术语..因为这不是它的事情下了订单,但它是怎么回事了一个例证)

还有一个功能称为RefreshRect(),它只刷新屏幕上的给定区域,为更大的应用程序提供更快的渲染时间。 两者都很好。

主要是因为你通常在WX另一个对象中创建对象,我真的不想这么WX语法,但试试这个:

import wx 

class DrawPanel(wx.Frame): 

    """Draw a line to a panel.""" 

    def __init__(self): 
     wx.Frame.__init__(self, title="Draw on Panel") 
     self.Bind(wx.EVT_PAINT, self.OnPaint) 

    def OnPaint(self, event=None): 
     dc = wx.PaintDC(self) 
     dc.Clear() 
     dc.SetPen(wx.Pen(wx.BLACK, 4)) 
     dc.DrawLine(0, 0, 50, 50) 

app = wx.App(False) 
frame = DrawPanel() 
frame.Show() 
app.MainLoop() 

直接从学校摘自:http://wiki.wxpython.org/VerySimpleDrawing

+0

DC没有刷新() – user2354526 2013-05-06 12:32:40

+0

@ user2354526现在当你第二次提到它时,主应用程序没有'Refresh()',因为这是一个清除它内部东西的对象函数。创建一个画布,或在我的第二个示例中创建一个框架,作为您在其中执行的操作的占位符。你通常这样做(创建一个包装所有东西的wx.Frame)。 – Torxed 2013-05-06 12:39:12

+0

谢谢!我只是在屏幕上画画,而不是创建框架并在其上绘制 – user2354526 2013-05-06 12:42:01