如何在wxpython中清除屏幕上的绘图?

时间:2013-05-06 12:01:32

标签: python wxpython

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

我只是在屏幕上绘图,而不是在框架上创建框架和绘图。

显示该行,但dc.Clear()无效。而且我找不到Refresh()代表dc。

请告诉我如何清除这条线?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试阅读以下内容: source code

有wxpython开发人员制作的脚本,我认为您也有同样的需求:

import wx

class FancyFrame(wx.Frame):
    def __init__(self, width, height):
        wx.Frame.__init__(self, None,
                          style = wx.STAY_ON_TOP |
                          wx.FRAME_NO_TASKBAR |
                          wx.FRAME_SHAPED,
                          size=(width, height))
        #self.SetTransparent(180)
        b = wx.EmptyBitmap(width, height)
        dc = wx.MemoryDC()
        dc.SelectObject(b)
        dc.SetBackground(wx.Brush('black'))
        dc.Clear()
        dc.SetBrush(wx.TRANSPARENT_BRUSH)
        dc.SetPen(wx.Pen('red', 4))
        dc.DrawRectangle(10, 10, width-20, height-20)
        dc.SelectObject(wx.NullBitmap)
        b.SetMaskColour('black')
        self.SetShape(wx.RegionFromBitmap(b))

        self.Bind(wx.EVT_KEY_UP, self.OnKeyDown)
        self.SetBackgroundColour('red')
        self.Show(True)

    def OnKeyDown(self, event):
        """quit if user press Esc"""
        if event.GetKeyCode() == 27:
            self.Close(force=True)
        else:
            event.Skip()

    app = wx.App()
    f = FancyFrame(300, 300)
    app.MainLoop()