【问题标题】:Why will nothing be drawn on my client area of the window - wxpython为什么在我的窗口客户区什么都不会画 - wxpython
【发布时间】:2020-11-19 10:43:31
【问题描述】:

我正在尝试在框架的客户区域上画一条简单的线。我不明白为什么什么都不会画。我通常使用 Pygame 来处理这些东西。

这是我的代码:

import wx
sigwin = wx.Frame(None,title = "Name of Window")
sigwin.SetSize(-1,-1,600,200))
sigwin.SetBackgroundColour((255,255,255))
txt = wx.StaticText(sigwin, id=-1, label='Please sign your name in the box below:',pos=(20,40),style=wx.ALIGN_CENTRE_HORIZONTAL)
font3 = wx.Font(15, wx.DECORATIVE, wx.NORMAL, wx.NORMAL,0,'Comic Sans MS')
txt.SetFont(font3)
sigwin.Centre()

def on_paint(event):
    dc = wx.ClientDC(event.GetEventObject())
    dc.Clear()
    dc.SetPen(wx.Pen("BLACK", 0))
    dc.DrawLine(0, 0, 500, 500)
    
sigwin.Bind(wx.EVT_PAINT, on_paint)
sigwin.Show()

【问题讨论】:

  • 在任何 GUI 程序中,通常都会有一个消息循环,程序在此接收消息并处理它们。我不知道wx 对这样的循环使用了什么,但我在此代码示例中看不到任何可能的内容。所以on_paint 处理程序永远不会被调用。

标签: python wxpython line draw dc


【解决方案1】:

由于您使用的是 GUI 库,因此它会在您完成后处理绘制事件。在这种情况下,您正在绘制一条线,然后 wx 在顶部绘制文本框。

此代码删除文本框并显示您的行:

import wx
app = wx.App(False)

sigwin = wx.Frame(None,title = "Name of Window")
sigwin.SetSize(-1,-1,600,200)
sigwin.SetBackgroundColour((255,255,255))
#txt = wx.StaticText(sigwin, id=-1, label='Please sign your name in the box below:',pos=(20,40),style=wx.ALIGN_CENTRE_HORIZONTAL)
#font3 = wx.Font(15, wx.DECORATIVE, wx.NORMAL, wx.NORMAL,0,'Comic Sans MS')
#txt.SetFont(font3)
sigwin.Centre()

def on_paint(event):
    dc = wx.ClientDC(event.GetEventObject())
    dc.Clear()
    dc.SetPen(wx.Pen("BLACK", 0))
    dc.DrawLine(0, 0, 500, 500)
    print('paint')
    
sigwin.Bind(wx.EVT_PAINT, on_paint)
sigwin.Show()

#frame = sigwin(None, "Sample editor")
app.MainLoop()

【讨论】:

  • 我明白了。我想我可以为绘图创建一个单独的面板。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
相关资源
最近更新 更多