python使用tkinter库实现五子棋游戏


Posted in Python onJune 18, 2019

本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下

一、运行截图:

python使用tkinter库实现五子棋游戏

python使用tkinter库实现五子棋游戏

python使用tkinter库实现五子棋游戏

python使用tkinter库实现五子棋游戏

二、代码

# 用数组定义一个棋盘,棋盘大小为 15×15
# 数组索引代表位置,
# 元素值代表该位置的状态:0代表没有棋子,1代表有黑棋,-1代表有白棋。
    
from tkinter import *
from tkinter.messagebox import *
 
 
class Chess(object):
 
 def __init__(self):
  #############
  # param #
  #######################################
  self.row, self.column = 15, 15
  self.mesh = 25
  self.ratio = 0.9
  self.board_color = "#CDBA96"
  self.header_bg = "#CDC0B0"
  self.btn_font = ("黑体", 12, "bold")
  self.step = self.mesh / 2
  self.chess_r = self.step * self.ratio
  self.point_r = self.step * 0.2
  self.matrix = [[0 for y in range(self.column)] for x in range(self.row)]
  self.is_start = False
  self.is_black = True
  self.last_p = None
 
  ###########
  # GUI #
  #######################################
  self.root = Tk()
  self.root.title("Gobang By Young")
  self.root.resizable(width=False, height=False)
 
  self.f_header = Frame(self.root, highlightthickness=0, bg=self.header_bg)
  self.f_header.pack(fill=BOTH, ipadx=10)
 
  self.b_start = Button(self.f_header, text="开始", command=self.bf_start, font=self.btn_font)
  self.b_restart = Button(self.f_header, text="重来", command=self.bf_restart, state=DISABLED, font=self.btn_font)
  self.l_info = Label(self.f_header, text="未开始", bg=self.header_bg, font=("楷体", 18, "bold"), fg="white")
  self.b_regret = Button(self.f_header, text="悔棋", command=self.bf_regret, state=DISABLED, font=self.btn_font)
  self.b_lose = Button(self.f_header, text="认输", command=self.bf_lose, state=DISABLED, font=self.btn_font)
 
  self.b_start.pack(side=LEFT, padx=20)
  self.b_restart.pack(side=LEFT)
  self.l_info.pack(side=LEFT, expand=YES, fill=BOTH, pady=10)
  self.b_lose.pack(side=RIGHT, padx=20)
  self.b_regret.pack(side=RIGHT)
 
  self.c_chess = Canvas(self.root, bg=self.board_color, width=(self.column + 1) * self.mesh,
        height=(self.row + 1) * self.mesh, highlightthickness=0)
  self.draw_board()
  self.c_chess.bind("<Button-1>", self.cf_board)
  self.c_chess.pack()
 
  self.root.mainloop()
 
 # 画x行y列处的网格
 def draw_mesh(self, x, y):
  # 一个倍率,由于tkinter操蛋的GUI,如果不加倍率,悔棋的时候会有一点痕迹,可以试试把这个改为1,就可以看到
  ratio = (1 - self.ratio) * 0.99 + 1
  center_x, center_y = self.mesh * (x + 1), self.mesh * (y + 1)
  # 先画背景色
  self.c_chess.create_rectangle(center_y - self.step, center_x - self.step,
          center_y + self.step, center_x + self.step,
          fill=self.board_color, outline=self.board_color)
  # 再画网格线,这里面a b c d是不同的系数,根据x,y不同位置确定,需要一定推导。
  a, b = [0, ratio] if y == 0 else [-ratio, 0] if y == self.row - 1 else [-ratio, ratio]
  c, d = [0, ratio] if x == 0 else [-ratio, 0] if x == self.column - 1 else [-ratio, ratio]
  self.c_chess.create_line(center_y + a * self.step, center_x, center_y + b * self.step, center_x)
  self.c_chess.create_line(center_y, center_x + c * self.step, center_y, center_x + d * self.step)
 
  # 有一些特殊的点要画小黑点
  if ((x == 3 or x == 11) and (y == 3 or y == 11)) or (x == 7 and y == 7):
   self.c_chess.create_oval(center_y - self.point_r, center_x - self.point_r,
          center_y + self.point_r, center_x + self.point_r, fill="black")
 
 # 画x行y列处的棋子,color指定棋子颜色
 def draw_chess(self, x, y, color):
  center_x, center_y = self.mesh * (x + 1), self.mesh * (y + 1)
  # 就是画个圆
  self.c_chess.create_oval(center_y - self.chess_r, center_x - self.chess_r,
         center_y + self.chess_r, center_x + self.chess_r,
         fill=color)
 
 # 画整个棋盘
 def draw_board(self):
  [self.draw_mesh(x, y) for y in range(self.column) for x in range(self.row)]
 
 # 在正中间显示文字
 def center_show(self, text):
  width, height = int(self.c_chess['width']), int(self.c_chess['height'])
  self.c_chess.create_text(int(width / 2), int(height / 2), text=text, font=("黑体", 30, "bold"), fill="red")
 
 # 开始的时候设置各个组件,变量的状态,初始化matrix矩阵,初始化棋盘,初始化信息
 def bf_start(self):
  self.set_btn_state("start")
  self.is_start = True
  self.is_black = True
  self.matrix = [[0 for y in range(self.column)] for x in range(self.row)]
  self.draw_board()
  self.l_info.config(text="黑方下棋")
 
 # 重来跟开始的效果一样
 def bf_restart(self):
  self.bf_start()
 
 # 用last_p来标识上一步的位置。先用网格覆盖掉棋子,操作相应的变量,matrix[x][y]要置空,只能悔一次棋
 def bf_regret(self):
  if not self.last_p:
   showinfo("提示", "现在不能悔棋")
   return
  x, y = self.last_p
  self.draw_mesh(x, y)
  self.matrix[x][y] = 0
  self.last_p = None
  self.trans_identify()
 
 # 几个状态改变,还有显示文字,没什么说的
 def bf_lose(self):
  self.set_btn_state("init")
  self.is_start = False
  text = self.ternary_operator("黑方认输", "白方认输")
  self.l_info.config(text=text)
  self.center_show("蔡")
 
 # Canvas的click事件
 def cf_board(self, e):
  # 找到离点击点最近的坐标
  x, y = int((e.y - self.step) / self.mesh), int((e.x - self.step) / self.mesh)
  # 找到该坐标的中心点位置
  center_x, center_y = self.mesh * (x + 1), self.mesh * (y + 1)
  # 计算点击点到中心的距离
  distance = ((center_x - e.y) ** 2 + (center_y - e.x) ** 2) ** 0.5
  # 如果距离不在规定的圆内,退出//如果这个位置已经有棋子,退出//如果游戏还没开始,退出
  if distance > self.step * 0.95 or self.matrix[x][y] != 0 or not self.is_start:
   return
  # 此时棋子的颜色,和matrix中该棋子的标识。
  color = self.ternary_operator("black", "white")
  tag = self.ternary_operator(1, -1)
  # 先画棋子,在修改matrix相应点的值,用last_p记录本次操作点
  self.draw_chess(x, y, color)
  self.matrix[x][y] = tag
  self.last_p = [x, y]
  # 如果赢了,则游戏结束,修改状态,中心显示某方获胜
  if self.is_win(x, y, tag):
   self.is_start = False
   self.set_btn_state("init")
   text = self.ternary_operator("黑方获胜", "白方获胜")
   self.center_show(text)
   return
  # 如果游戏继续,则交换棋手
  self.trans_identify()
 
 def is_win(self, x, y, tag):
  # 获取斜方向的列表
  def direction(i, j, di, dj, row, column, matrix):
   temp = []
   while 0 <= i < row and 0 <= j < column:
    i, j = i + di, j + dj
   i, j = i - di, j - dj
   while 0 <= i < row and 0 <= j < column:
    temp.append(matrix[i][j])
    i, j = i - di, j - dj
   return temp
 
  four_direction = []
  # 获取水平和竖直方向的列表
  four_direction.append([self.matrix[i][y] for i in range(self.row)])
  four_direction.append([self.matrix[x][j] for j in range(self.column)])
  # 获取斜方向的列表
  four_direction.append(direction(x, y, 1, 1, self.row, self.column, self.matrix))
  four_direction.append(direction(x, y, 1, -1, self.row, self.column, self.matrix))
 
  # 一一查看这四个方向,有没有满足五子连珠
  for v_list in four_direction:
   count = 0
   for v in v_list:
    if v == tag:
     count += 1
     if count == 5:
      return True
    else:
     count = 0
  return False
 
 # 设置四个按钮是否可以点击
 def set_btn_state(self, state):
  state_list = [NORMAL, DISABLED, DISABLED, DISABLED] if state == "init" else [DISABLED, NORMAL, NORMAL, NORMAL]
  self.b_start.config(state=state_list[0])
  self.b_restart.config(state=state_list[1])
  self.b_regret.config(state=state_list[2])
  self.b_lose.config(state=state_list[3])
 
 # 因为有很多和self.black相关的三元操作,所以就提取出来
 def ternary_operator(self, true, false):
  return true if self.is_black else false
 
 # 交换棋手
 def trans_identify(self):
  self.is_black = not self.is_black
  text = self.ternary_operator("黑方下棋", "白方下棋")
  self.l_info.config(text=text)
 
 
if __name__ == '__main__':
 Chess()

三、增加复盘和保存棋谱功能

直接贴可以运行的源码,添加了两个按键和一个页面。

python使用tkinter库实现五子棋游戏

python使用tkinter库实现五子棋游戏

python使用tkinter库实现五子棋游戏

# 用数组定义一个棋盘,棋盘大小为 15×15
# 数组索引代表位置,
# 元素值代表该位置的状态:0代表没有棋子,1代表有黑棋,-1代表有白棋。
 
from tkinter import *
from tkinter.messagebox import *
import os
 
TAG_BLACK = "1"
TAG_EMPTY = "."
TAG_WHITE = "0"
ROOT_DIR = os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + os.path.sep + ".")
 
 
class Chess(object):
 
 def bf_save(self):
 
  path = os.path.join(ROOT_DIR, "record.txt")
  file = open(path, "w")
  for i in range(len(self.record)):
   x, y = self.record[i]
   file.write("{}: [{}, {}]\n".format("黑方" if i % 2 == 0 else "白方", x, y))
  file.close()
 
 def init_matrix(self):
  return [[TAG_EMPTY for y in range(self.column)] for x in range(self.row)]
 
 def __init__(self):
  #############
  # param #
  #######################################
  self.row, self.column = 15, 15
  self.mesh = 25
  self.ratio = 0.9
  self.board_color = "#CDBA96"
  self.header_bg = "#CDC0B0"
  self.btn_font = ("黑体", 12, "bold")
  self.step = self.mesh / 2
  self.chess_r = self.step * self.ratio
  self.point_r = self.step * 0.2
  self.matrix = self.init_matrix()
  self.is_start = False
  self.is_black = True
  self.record = []
 
  ###########
  # GUI #
  #######################################
  self.root = Tk()
  self.root.title("Gobang By Young")
  self.root.resizable(width=False, height=False)
 
  self.f_header = Frame(self.root, highlightthickness=0, bg=self.header_bg)
 
  self.b_start = Button(self.f_header, text="开始", command=self.bf_start, font=self.btn_font)
  self.b_restart = Button(self.f_header, text="重来", command=self.bf_restart, state=DISABLED, font=self.btn_font)
  self.l_info = Label(self.f_header, text="未开始", bg=self.header_bg, font=("楷体", 18, "bold"), fg="white")
  self.b_regret = Button(self.f_header, text="悔棋", command=self.bf_regret, state=DISABLED, font=self.btn_font)
  self.b_lose = Button(self.f_header, text="认输", command=self.bf_lose, state=DISABLED, font=self.btn_font)
 
  self.c_chess = Canvas(self.root, bg=self.board_color, width=(self.column + 1) * self.mesh,
        height=(self.row + 1) * self.mesh, highlightthickness=0)
  self.draw_board()
  self.c_chess.bind("<Button-1>", self.cf_board)
 
  self.b_record = Button(self.root, text="复 盘", command=self.bf_record, font=self.btn_font, bg="lightblue")
  self.b_save = Button(self.root, text="保 存", command=self.bf_save, font=self.btn_font, bg="lightblue")
 
  self.f_header.pack(side=TOP, fill=BOTH, ipadx=10)
  self.b_start.pack(side=LEFT, padx=20)
  self.b_restart.pack(side=LEFT)
  self.l_info.pack(side=LEFT, expand=YES, fill=BOTH, pady=10)
  self.b_lose.pack(side=RIGHT, padx=20)
  self.b_regret.pack(side=RIGHT)
 
  self.c_chess.pack(side=TOP)
 
  self.b_record.pack(side=TOP, expand=YES, fill=X)
  self.b_save.pack(side=TOP, expand=YES, fill=X)
 
  self.root.mainloop()
 
 # 画x行y列处的网格
 def draw_mesh(self, x, y):
  # 一个倍率,由于tkinter操蛋的GUI,如果不加倍率,悔棋的时候会有一点痕迹,可以试试把这个改为1,就可以看到
  ratio = (1 - self.ratio) * 0.99 + 1
  center_x, center_y = self.mesh * (x + 1), self.mesh * (y + 1)
  # 先画背景色
  self.c_chess.create_rectangle(center_y - self.step, center_x - self.step,
          center_y + self.step, center_x + self.step,
          fill=self.board_color, outline=self.board_color)
  # 再画网格线,这里面a b c d是不同的系数,根据x,y不同位置确定,需要一定推导。
  a, b = [0, ratio] if y == 0 else [-ratio, 0] if y == self.row - 1 else [-ratio, ratio]
  c, d = [0, ratio] if x == 0 else [-ratio, 0] if x == self.column - 1 else [-ratio, ratio]
  self.c_chess.create_line(center_y + a * self.step, center_x, center_y + b * self.step, center_x)
  self.c_chess.create_line(center_y, center_x + c * self.step, center_y, center_x + d * self.step)
 
  # 有一些特殊的点要画小黑点
  if ((x == 3 or x == 11) and (y == 3 or y == 11)) or (x == 7 and y == 7):
   self.c_chess.create_oval(center_y - self.point_r, center_x - self.point_r,
          center_y + self.point_r, center_x + self.point_r, fill="black")
 
 # 画x行y列处的棋子,color指定棋子颜色
 def draw_chess(self, x, y, color):
  center_x, center_y = self.mesh * (x + 1), self.mesh * (y + 1)
  # 就是画个圆
  self.c_chess.create_oval(center_y - self.chess_r, center_x - self.chess_r,
         center_y + self.chess_r, center_x + self.chess_r,
         fill=color)
 
 # 画整个棋盘
 def draw_board(self):
  [self.draw_mesh(x, y) for y in range(self.column) for x in range(self.row)]
 
 # 在正中间显示文字
 def center_show(self, text):
  width, height = int(self.c_chess['width']), int(self.c_chess['height'])
  self.c_chess.create_text(int(width / 2), int(height / 2), text=text, font=("黑体", 30, "bold"), fill="red")
 
 def bf_record(self):
  Record(self.record)
  pass
 
 # 开始的时候设置各个组件,变量的状态,初始化matrix矩阵,初始化棋盘,初始化信息
 def bf_start(self):
  self.set_btn_state("start")
  self.is_start = True
  self.is_black = True
  self.matrix = self.init_matrix()
  self.draw_board()
  self.record = []
  self.l_info.config(text="黑方下棋")
 
 # 重来跟开始的效果一样
 def bf_restart(self):
  self.record = []
  self.bf_start()
 
 # 用last_p来标识上一步的位置。先用网格覆盖掉棋子,操作相应的变量,matrix[x][y]要置空,只能悔一次棋
 def bf_regret(self):
  if len(self.record) == 0:
   showinfo("提示", "现在不能悔棋")
   return
  x, y = self.record[-1]
  self.draw_mesh(x, y)
  self.matrix[x][y] = TAG_EMPTY
  self.record = self.record[:-1]
  self.trans_identify()
 
 # 几个状态改变,还有显示文字,没什么说的
 def bf_lose(self):
  self.set_btn_state("init")
  self.is_start = False
  text = self.ternary_operator("黑方认输", "白方认输")
  self.l_info.config(text=text)
  self.center_show("蔡")
 
 def go_chess(self, x, y):
  # 此时棋子的颜色,和matrix中该棋子的标识。
  color = self.ternary_operator("black", "white")
  tag = self.ternary_operator(TAG_BLACK, TAG_WHITE)
  # 先画棋子,在修改matrix相应点的值,用last_p记录本次操作点
  self.draw_chess(x, y, color)
  self.matrix[x][y] = tag
  self.record.append([x, y])
  # 如果赢了,则游戏结束,修改状态,中心显示某方获胜
  if self.is_win(x, y, tag):
   self.is_start = False
   self.set_btn_state("init")
   text = self.ternary_operator("黑方获胜", "白方获胜")
   self.center_show(text)
   return
  # 如果游戏继续,则交换棋手
  self.trans_identify()
 
 # Canvas的click事件
 def cf_board(self, e):
  # 找到离点击点最近的坐标
  x, y = int((e.y - self.step) / self.mesh), int((e.x - self.step) / self.mesh)
  # 找到该坐标的中心点位置
  center_x, center_y = self.mesh * (x + 1), self.mesh * (y + 1)
  # 计算点击点到中心的距离
  distance = ((center_x - e.y) ** 2 + (center_y - e.x) ** 2) ** 0.5
  # 如果距离不在规定的圆内,退出//如果这个位置已经有棋子,退出//如果游戏还没开始,退出
  if distance > self.step * 0.95 or self.matrix[x][y] != TAG_EMPTY or not self.is_start:
   return
  self.go_chess(x, y)
 
 def is_win(self, x, y, tag):
  # 获取斜方向的列表
  def direction(i, j, di, dj, row, column, matrix):
   temp = []
   while 0 <= i < row and 0 <= j < column:
    i, j = i + di, j + dj
   i, j = i - di, j - dj
   while 0 <= i < row and 0 <= j < column:
    temp.append(matrix[i][j])
    i, j = i - di, j - dj
   return temp
 
  four_direction = []
  # 获取水平和竖直方向的列表
  four_direction.append([self.matrix[i][y] for i in range(self.row)])
  four_direction.append([self.matrix[x][j] for j in range(self.column)])
  # 获取斜方向的列表
  four_direction.append(direction(x, y, 1, 1, self.row, self.column, self.matrix))
  four_direction.append(direction(x, y, 1, -1, self.row, self.column, self.matrix))
 
  # 一一查看这四个方向,有没有满足五子连珠
  for v_list in four_direction:
   if tag * 5 in "".join(v_list):
    return True
  return False
 
 # 设置四个按钮是否可以点击
 def set_btn_state(self, state):
  state_list = [NORMAL, DISABLED, DISABLED, DISABLED] if state == "init" else [DISABLED, NORMAL, NORMAL, NORMAL]
  self.b_start.config(state=state_list[0])
  self.b_restart.config(state=state_list[1])
  self.b_regret.config(state=state_list[2])
  self.b_lose.config(state=state_list[3])
 
 # 因为有很多和self.black相关的三元操作,所以就提取出来
 def ternary_operator(self, true, false):
  return true if self.is_black else false
 
 # 交换棋手
 def trans_identify(self):
  self.is_black = not self.is_black
  text = self.ternary_operator("黑方下棋", "白方下棋")
  self.l_info.config(text=text)
 
 def print_process(self):
  pass
 
 
class Record(object):
 
 def __init__(self, record):
  #############
  # param #
  #######################################
  self.row, self.column = 15, 15
  self.mesh = 25
  self.ratio = 0.9
  self.board_color = "#CDBA96"
  self.header_bg = "#CDC0B0"
  self.btn_font = ("黑体", 12, "bold")
  self.step = self.mesh / 2
  self.chess_r = self.step * self.ratio
  self.point_r = self.step * 0.2
  ###########
  self.is_black = True
  self.index = -1
  self.record = record
  ###########
  # GUI #
  #######################################
  self.root = Tk()
  self.root.title("复盘")
  self.root.resizable(width=False, height=False)
  self.root.bind("<Key>", self.kf_step)
 
  self.f_header = Frame(self.root, highlightthickness=0, bg=self.header_bg)
  self.l_info = Label(self.f_header, text="未开始", bg=self.header_bg, font=("楷体", 18, "bold"), fg="white")
 
  self.c_chess = Canvas(self.root, bg=self.board_color, width=(self.column + 1) * self.mesh,
        height=(self.row + 1) * self.mesh, highlightthickness=0)
  self.draw_board()
 
  self.f_header.pack(fill=BOTH, ipadx=10)
  self.l_info.pack(side=LEFT, expand=YES, fill=BOTH, pady=10)
  self.c_chess.pack()
 
  self.root.mainloop()
 
 def kf_step(self, e):
  if e.keycode not in [37, 39]:
   return
  if e.keycode == 37:
   if self.index == -1:
    self.l_info.config(text="已经走到最开始了")
    return
   x, y = self.record[self.index]
   self.draw_mesh(x, y)
   if self.index == 0:
    self.l_info.config(text="未开始")
   else:
    self.l_info.config(text="黑方走棋" if self.is_black else "白方走棋")
   self.is_black = not self.is_black
   self.index -= 1
   if self.index > 0:
    x, y = self.record[self.index]
    color = "white" if self.is_black else "black"
    self.draw_chess(x, y, color, "red")
 
  elif e.keycode == 39:
   if self.index == len(self.record) - 1:
    self.l_info.config(text="已经走到最末尾了")
    return
   self.index += 1
   x, y = self.record[self.index]
   color = "black" if self.is_black else "white"
   self.draw_chess(x, y, color, "red")
   if self.index > 0:
    x, y = self.record[self.index - 1]
    color = "white" if self.is_black else "black"
    self.draw_chess(x, y, color)
   self.l_info.config(text="黑方走棋" if self.is_black else "白方走棋")
   self.is_black = not self.is_black
  else:
   pass
 
 # 画x行y列处的网格
 def draw_mesh(self, x, y):
  # 一个倍率,由于tkinter操蛋的GUI,如果不加倍率,悔棋的时候会有一点痕迹,可以试试把这个改为1,就可以看到
  ratio = (1 - self.ratio) * 0.99 + 1
  center_x, center_y = self.mesh * (x + 1), self.mesh * (y + 1)
  # 先画背景色
  self.c_chess.create_rectangle(center_y - self.step, center_x - self.step,
          center_y + self.step, center_x + self.step,
          fill=self.board_color, outline=self.board_color)
  # 再画网格线,这里面a b c d是不同的系数,根据x,y不同位置确定,需要一定推导。
  a, b = [0, ratio] if y == 0 else [-ratio, 0] if y == self.row - 1 else [-ratio, ratio]
  c, d = [0, ratio] if x == 0 else [-ratio, 0] if x == self.column - 1 else [-ratio, ratio]
  self.c_chess.create_line(center_y + a * self.step, center_x, center_y + b * self.step, center_x)
  self.c_chess.create_line(center_y, center_x + c * self.step, center_y, center_x + d * self.step)
 
  # 有一些特殊的点要画小黑点
  if ((x == 3 or x == 11) and (y == 3 or y == 11)) or (x == 7 and y == 7):
   self.c_chess.create_oval(center_y - self.point_r, center_x - self.point_r,
          center_y + self.point_r, center_x + self.point_r, fill="black")
 
 # 画x行y列处的棋子,color指定棋子颜色
 def draw_chess(self, x, y, color, outline="black"):
  center_x, center_y = self.mesh * (x + 1), self.mesh * (y + 1)
  # 就是画个圆
  self.c_chess.create_oval(center_y - self.chess_r, center_x - self.chess_r,
         center_y + self.chess_r, center_x + self.chess_r,
         fill=color, outline=outline)
 
 # 画整个棋盘
 def draw_board(self):
  [self.draw_mesh(x, y) for y in range(self.column) for x in range(self.row)]
 
 # 在正中间显示文字
 def center_show(self, text):
  width, height = int(self.c_chess['width']), int(self.c_chess['height'])
  self.c_chess.create_text(int(width / 2), int(height / 2), text=text, font=("黑体", 30, "bold"), fill="red")
 
 # 开始的时候设置各个组件,变量的状态,初始化matrix矩阵,初始化棋盘,初始化信息
 
 
if __name__ == '__main__':
 Chess()

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
python开发之str.format()用法实例分析
Feb 22 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
使用Python实现在Windows下安装Django
Oct 17 Python
Python中shapefile转换geojson的示例
Jan 03 Python
python3+selenium实现126邮箱登陆并发送邮件功能
Jan 23 Python
python多进程重复加载的解决方式
Dec 13 Python
如何基于python操作json文件获取内容
Dec 24 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
python进度条显示之tqmd模块
Aug 22 Python
通过代码实例了解Python异常本质
Sep 16 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
Apr 14 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 #Python
python 弹窗提示警告框MessageBox的实例
Jun 18 #Python
python实现五子棋小程序
Jun 18 #Python
Python 实现还原已撤回的微信消息
Jun 18 #Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 #Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 #Python
python实现五子棋游戏
Jun 18 #Python
You might like
php延迟静态绑定实例分析
2015/02/08 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
php实现简单加入购物车功能
2017/03/07 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
js 颜色选择插件
2017/01/23 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
python中的colorlog库使用详解
2019/07/05 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
详解python UDP 编程
2020/08/24 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
赡养老人协议书
2014/04/21 职场文书
单位工作证明书格式
2014/10/04 职场文书
中学生检讨书范文
2014/11/03 职场文书
大学生自我评价范文
2015/03/03 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript