2013-05-06 118 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