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

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

该行出现,但dc.Clear()没有效果。我找不到Refresh()直流电。

请告诉我如何清除线路?

4

2 回答 2

1

首先,阅读手册: 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()which 的函数,它只刷新屏幕的给定区域,为大型应用程序提供更快的渲染时间。两者都工作得很好。

主要是因为你通常在 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

于 2013-05-06T12:09:25.077 回答
0

尝试阅读: https ://groups.google.com/forum/#!topic/wxpython-users/4AHOiJh75No

有 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()
于 2019-04-28T14:58:50.007 回答