当前位置: 首页 > 知识库问答 >
问题:

我想给画的画一个事件

徐景明
2023-03-14

我想为我画的画举办一个活动。

目前,我用wxPython绘制矩形,

我想连接按钮一样的链接。

有可能吗?

如果可能的话,请给我建议。

下面是我的代码。

import wx

class Example(wx.Frame):
    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title, 
            size=(350, 280))

        self.Bind(wx.EVT_PAINT, self.OnPaint)

        self.Centre()
        self.Show()


    def OnPaint(self, e):
        dc = wx.ClientDC(self)

        dc.SetBrush(wx.Brush("YELLOW"))
        self.original = dc.DrawRectangle(10, 15, 90, 60)


if __name__ == '__main__':
    app = wx.App()
    Example(None, 'Colours')
    app.MainLoop()

共有2个答案

戚峻
2023-03-14

注:

您不希望在油漆事件中使用ClientDC!你可以用PaintDC代替。

当系统需要重新绘制窗口时,甚至会出现绘制。因此,您要做的是:

  • 存储类中窗口的状态。
  • 在油漆处理程序中,构造一个PaintDC,并使用对象的状态来绘制您希望窗口看起来像什么。
  • 如果您希望Windows的外观由于系统Paint事件以外的其他事件而更新,那么请调用:自己。刷新()自我。更新()

这将触发绘制事件。

(您也可以使用ClientDC和draw,但最好使用Update()——这样系统可以更好地计时绘图)

关于在Wiki herre上绘图有很多内容:

http://wiki.wxpython.org/RecipesImagesAndGraphics

我没有回答你关于按钮衬里的问题,因为我不明白你想做什么。但是寻找鼠标事件——这可能是您想要的。

司空海荣
2023-03-14

当您第一次看到这一点时,当按下按钮时,很容易调用OnPaint方法。但这不会按你想要的方式工作。

关于绘制东西的一个重要观点是,每次需要重新绘制屏幕时,都需要调用OnPant事件处理程序——这是显而易见的。这意味着,您需要的逻辑,什么应该绘制是随时可用的,所以它可以被调用,只要你喜欢。你不能在按下按钮后画东西,并期望它保持画下去——下一次绘画事件会把它擦掉。

这意味着你需要这样的逻辑:

import wx

class Example(wx.Frame):
    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title, 
            size=(350, 280))

        self._showRectangle = False

        draw_button = wx.Button(self, label="Press Me")

        self.Bind(wx.EVT_BUTTON, self.OnButtonPressed, draw_button)

        self.Bind(wx.EVT_PAINT, self.OnPaint)

        self.Centre()
        self.Show()

    def OnButtonPressed(self, e):
        self._showRectangle = not(self._showRectangle)

    def OnPaint(self, e):
        # This must be called from EVT_PAINT, not EVT_BUTTON
        print "painting..."
        if self._showRectangle:
            dc = wx.ClientDC(self)

            dc.SetBrush(wx.Brush("YELLOW"))
            self.original = dc.DrawRectangle(10, 15, 90, 60)


app = wx.App()
Example(None, 'Colours')
app.MainLoop()

我在那里放了一个print语句,以强调需要理解何时调用这个处理程序。尝试最小化和最大化应用程序,等等。。。

 类似资料:
  • 有没有可能用画布在Android中实现下面的图片? 我想有一个洞,而不仅仅是在黄色的红色层上有一个圈。我在-method中使用以下代码进行了尝试(但失败了): 但是当我使用这段代码时,它在两个位图上都开了一个洞。最后,这个应用程序应该是一个带有球、洞和其他东西的迷宫。当球掉进洞里时,它应该出现在红色位图下。有可能实现这一点吗? 答: 如果有人也有同样的问题:使用View而不是SurfaceView

  • 我试着在画布里放一幅画。但就是没有出现。我谷歌了一下,看看哪里出了问题。不幸的是,我还是解决不了。这是我的代码 这是css文件

  • 在游戏中,经常需要在动画结束或者某一帧的特定时刻,执行一些函数方法。这时候就可以通过添加动画事件来实现,在某个关键帧上添加事件函数后,动画系统将会在动画执行到该关键帧时,去匹配动画根节点身上的对应函数方法并执行它们。在脚本内添加帧事件的相关处理,以及更多内容请参考 帧事件。 添加事件帧 首先将时间控制线移动到需要添加事件的位置,然后点击工具栏区域的按钮,这时候在对应的时间轴上会出现一个一样的金色图

  • 谷爱凌在北京冬奥会自由式滑雪女子大跳台比赛中获得冠军,以从未在赛场尝试过的高难度动作获得了全场最高分。不仅如此,谷爱凌在17岁时就已经拥有了六十多枚奖牌,仅在2021-2022赛季世界杯就获得了6金2银1铜共9枚奖牌。除了滑雪,还会钢琴、马术、芭蕾,因为喜欢跑步,还差点成为田径运动员。她还是个学霸,以1580分的SAT(美国高中生大学入学考试,满分1600)成绩被斯坦福大学录取。她还涉足时尚界,成为众多时尚品牌和刊物的宠儿。这不是妥