5.wxPython响应鼠标点击画出棋子

作者: 赵明嗯 | 来源:发表于2020-06-10 21:42 被阅读0次

今天我们为wxPython窗体设置鼠标点击事件,并在事件响应函数里画出黑白棋子。这里我们为窗体绑定wx.EVT_LEFT_UP这个事件码,来响应鼠标左键抬起事件。在事件处理函数里我们通过 event.GetPosition()函数来获取鼠标点击位置坐标,并将坐标点圆整,方便画圆形棋子时,棋子正好不偏不倚落在棋盘的交点处(后期可以加入随机数,对落子坐标进行处理,使棋子可以模拟现实落子,实现歪歪扭扭的效果)。我们采用wx.ClientDC容器来画棋子,wx.ClientDC不必设置在窗体事件中,可以随时作画,缺点是窗体重画之后会消失。

#在棋盘上画出棋子
import wx
class myFrame(wx.Frame):
    def __init__(self):
        self.unit = 30
        self.pointNum = 15
        self.pieceNum=0
        self.bkCol=(220, 210, 0)
        self.wht=(255,255,255)
        self.blk=(0,0,0)
        self.actColor=self.blk
        super().__init__\
            (parent=None,pos=[100,100],
             size=[self.unit*self.pointNum
                   +self.unit+20,
                   self.unit*self.pointNum
                   +self.unit+30+20],
             title="商贾三国")
        self.SetIcon(wx.Icon("WeatherBundle.ico"))
        self.panel = wx.Panel(self)
        self.panel.SetBackgroundColour(self.bkCol)
        self.tip = \
            wx.TextCtrl(self.panel, -1, "",
                        pos=(self.unit*self.pointNum
                             +self.unit-80, 0),
                        size=(80,25))
        self.tip.SetBackgroundColour(self.bkCol)
        self.panel.Bind(wx.EVT_PAINT,self.draw)
        self.panel.Bind(wx.EVT_LEFT_UP, self.OnClick)
        self.Show()
    def draw(self,event):
        mydc=wx.PaintDC(self.panel)
        unit=self.unit
        pointNum=self.pointNum
        x=unit
        y=unit
        for i in range(1,pointNum+1):
            mydc.DrawLine(x,y,x,unit*pointNum)
            x=x+unit
        x=unit
        for i in range(1,pointNum+1):
            mydc.DrawLine(x, y, unit*pointNum, y)
            y=y+unit
    def OnClick(self,event):
        unit=self.unit
        pos = event.GetPosition()
        mydc=wx.ClientDC(self.panel)
        if self.pieceNum%2==0:
            self.actColor=self.blk
        else:self.actColor=self.wht
        mydc.SetBrush(wx.Brush(self.actColor))
        x=round(pos.x/unit)*unit
        y=round(pos.y/unit)*unit
        mydc.DrawCircle(x,y,self.unit/2.5)
        self.pieceNum = self.pieceNum+1
        self.tip.SetValue('%s,%s' % (x,y))
myapp=wx.App()
myframe=myFrame()
myapp.MainLoop()
qizi.png

相关文章

  • 5.wxPython响应鼠标点击画出棋子

    今天我们为wxPython窗体设置鼠标点击事件,并在事件响应函数里画出黑白棋子。这里我们为窗体绑定wx.EVT_L...

  • C++五子棋(三)——判断鼠标有效点击

    分析 在鼠标左键点击时,我们不能让新棋子在已有棋子的位置落下,同时我们还要让棋子在规定位置落下——棋盘线的交点处。...

  • MacOS 开发 -NSView添加鼠标监控

    一、鼠标点击事件响应流程简述: 1.鼠标硬件先接收到用户点击;2.然后交给鼠标驱动来处理,这个驱动是在Mac OS...

  • UI遮挡3D物体响应

    1.UI响应,和它重叠的3D物体不响应 2.UI响应,3D物体也响应 3.鼠标点击左键和右键,如果点击了UI,不希...

  • 2018年面试题

    1、页面上点击了某个视图,画出事件的响应链和传递链 2、视图上某块区域如何让其不响应点击 3、应用启动加速优化 4...

  • 事件

    (1)、鼠标事件: 鼠标点击事件(单击): onclick 鼠标点击事件(...

  • AI知识点-锚点与路径

    添加/删除锚点 画出一个矩形,选择钢笔工具,移动鼠标到一条路径上,看见有个“钢笔+”,点击鼠标即可增加一个锚点。 ...

  • 异步机制的引入

    任何时候,只要把一段代码封装成一个函数,并指定它在响应某个事件(定时器、鼠标点击、ajax响应)时执行,这时我们在...

  • Selenium WebDriver 中鼠标事件

    鼠标点击操作 鼠标点击事件有以下几种类型: 清单 1. 鼠标左键点击 Actions action = new A...

  • JavaScript常用事件总结归纳

    1、鼠标事件 onclick 鼠标点击事件,当鼠标左键点击时候会触发。 ondbclick 当鼠标双击时候会触发...

网友评论

    本文标题:5.wxPython响应鼠标点击画出棋子

    本文链接:https://www.haomeiwen.com/subject/grrmtktx.html