wxPython实例

今天用wxPython做了一个小游戏.

import wx
from random import choice,shuffle
class frame(wx.Frame):
    def __init__(self,app):
        wx.Frame.__init__(self,None,title='翻牌',size=(400,300))
        p=wx.Panel(self)
        p.SetBackgroundColour('White')#设置背景颜色
        gs=wx.GridSizer(4,5,5,5)#创建GridSizer网格布局
        self.button=list()
        for i in range(1,21):
            b=wx.Button(p,i,label='快来翻我!')
            self.button.append(b)
            gs.Add(b,0,wx.EXPAND)
            b.Bind(wx.EVT_BUTTON,self.onbutton,id=i)
            #循环往布局中加入按钮
        p.SetSizer(gs)
        self.l=[None,None]#被按下的按钮
        self.dats=list()#按钮代表的值
        for i in range(1,11):
            self.dats.append(choice([1,2,3,4,5]))#随机添加十个数字(1-5)
        for i in range(1,11):
            self.dats.append(self.dats[i-1])#复制另外十个数字,因为要保证哪一个数字都有至少一对,这样才能翻完.
        shuffle(self.dats)#打乱顺序
        self.timer=wx.Timer(self)
        self.Bind(wx.EVT_TIMER,self.ontimer,self.timer)
        self.ID=list()#被按过按钮的ID
        self.IDs=[None,None]#对应self.l,这是被按下的两个按钮的ID
        self.ActiveIDCount=0#在ID中还没有被翻回的按钮的数量
        self.Show()
        app.MainLoop()#主循环
    def onbutton(self,e):#当按下按钮
        event=e.GetEventObject()
        if event.GetLabel()=='我已阵亡。':
            return -1
        if(self.l[0] and self.IDs[0]!=event.GetId()):
            self.l[1]=str(self.dats[event.GetId()-1])
            self.IDs[1]=event.GetId()#设置self.l
        elif not self.l[0]:
            self.l[0]=str(self.dats[event.GetId()-1])
            self.IDs[0]=event.GetId()
        event.SetLabel(str(self.dats[event.GetId()-1]))
        self.ID.append(event)
        self.ActiveIDCount+=1
        self.timer.Start(700)#700毫秒后翻回按钮
    def ontimer(self,e):#返回并监测是否有两个按钮被翻开且数值一样
        if self.ActiveIDCount==0:
            return -1
        if not len(self.ID)==self.ActiveIDCount:
            del self.ID[0:len(self.ID)-self.ActiveIDCount]
        if self.l[0]==self.l[1]:
            self.l=[None,None]
            for i in self.ID:
                i.SetLabel('我已阵亡。')
                self.ActiveIDCount-=1
            return -1
        for i in self.ID:
            i.SetLabel('快来翻我!')
            self.ActiveIDCount-=1
        self.l=[None,None]
app = wx.App()#创建app对象
frame(app)#调用

结果:
wxPython实例_第1张图片
在翻开两个同样的之后:
wxPython实例_第2张图片

你可能感兴趣的:(Python,wx,wxPython,小游戏)