import wx
app=wx.App()
dc=wx.ScreenDC()
dc.DrawLine(100,100,500,500)
dc.Clear()
我只是在屏幕上绘图,而不是在框架上创建框架和绘图。
显示该行,但dc.Clear()
无效。而且我找不到Refresh()
代表dc。
请告诉我如何清除这条线?
答案 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()
答案 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()