怎么用Python+Tkinter实现经典井字棋小游戏
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要讲解了"怎么用Python+Tkinter实现经典井字棋小游戏",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用Python+Tkint
千家信息网最后更新 2025年11月09日怎么用Python+Tkinter实现经典井字棋小游戏
这篇文章主要讲解了"怎么用Python+Tkinter实现经典井字棋小游戏",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用Python+Tkinter实现经典井字棋小游戏"吧!
演示
介绍
首先来介绍一下GUI库Tkinter

主要模块:
tkinterMain Tkinter module.
tkinter.colorchooser 让用户选择颜色的对话框。
tkinter.commondialog 本文其他模块定义的对话框的基类。
tkinter.filedialog 允许用户指定文件的通用对话框,用于打开或保存文件。
tkinter.font 帮助操作字体的工具。
tkinter.messagebox 访问标准的 Tk 对话框。
tkinter.scrolledtext 内置纵向滚动条的文本组件。
tkinter.simpledialog 基础对话框和一些便捷功能。
tkinter.ttkThemed widget set introduced in Tk 8.5, providing modern alternatives for many of the classic widgets in the main tkinter module.
一个小demo大家熟悉一下
from tkinter import *from tkinter import ttkroot = Tk()frm = ttk.Frame(root, padding=10)frm.grid()ttk.Label(frm, text="Hello World!").grid(column=0, row=0)ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0)root.mainloop()
官方文档
我说的再好也不如去看看文档,有什么不明白的可以下方留言。嘿嘿嘿传送门
tkinter.messagebox
这部分其实我就是直接拿来用了没怎么了解,我把经常用的给大家说说

class tkinter.messagebox.Message(master=None, **options)创建一个默认信息消息框。信息消息框tkinter.messagebox.showinfo(title=None, message=None, **options)警告消息框tkinter.messagebox.showwarning(title=None, message=None, **options)tkinter.messagebox.showerror(title=None, message=None, **options)疑问消息框tkinter.messagebox.askquestion(title=None, message=None, **options)tkinter.messagebox.askokcancel(title=None, message=None, **options)tkinter.messagebox.askretrycancel(title=None, message=None, **options)tkinter.messagebox.askyesno(title=None, message=None, **options)tkinter.messagebox.askyesnocancel(title=None, message=None, **options)
源码
from tkinter import *import tkinter.messagebox as msgroot = Tk()root.title('TIC-TAC-TOE---Project Gurukul')# labelsLabel(root, text="player1 : X", font="times 15").grid(row=0, column=1)Label(root, text="player2 : O", font="times 15").grid(row=0, column=2)digits = [1, 2, 3, 4, 5, 6, 7, 8, 9]# for player1 sign = X and for player2 sign= Ymark = ''# counting the no. of clickcount = 0panels = ["panel"] * 10def win(panels, sign): return ((panels[1] == panels[2] == panels[3] == sign) or (panels[1] == panels[4] == panels[7] == sign) or (panels[1] == panels[5] == panels[9] == sign) or (panels[2] == panels[5] == panels[8] == sign) or (panels[3] == panels[6] == panels[9] == sign) or (panels[3] == panels[5] == panels[7] == sign) or (panels[4] == panels[5] == panels[6] == sign) or (panels[7] == panels[8] == panels[9] == sign))def checker(digit): # 检查按键 if digit == 1 and digit in digits: digits.remove(digit) ##player1 will play if the value of count is even and for odd player2 will play if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button1.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 2 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button2.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 3 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button3.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 4 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button4.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 5 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button5.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 6 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button6.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 7 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button7.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 8 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button8.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 9 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button9.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() ###if count is greater then 8 then the match has been tied if (count > 8 and win(panels, 'X') == False and win(panels, 'O') == False): msg.showinfo("Result", "Match Tied") root.destroy()####定义每个格子button1 = Button(root, width=15, font=('Times 16 bold'), height=7, command=lambda: checker(1))button1.grid(row=1, column=1)button2 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(2))button2.grid(row=1, column=2)button3 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(3))button3.grid(row=1, column=3)button4 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(4))button4.grid(row=2, column=1)button5 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(5))button5.grid(row=2, column=2)button6 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(6))button6.grid(row=2, column=3)button7 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(7))button7.grid(row=3, column=1)button8 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(8))button8.grid(row=3, column=2)button9 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(9))button9.grid(row=3, column=3)感谢各位的阅读,以上就是"怎么用Python+Tkinter实现经典井字棋小游戏"的内容了,经过本文的学习后,相信大家对怎么用Python+Tkinter实现经典井字棋小游戏这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
对话框
对话
小游戏
经典
井字
消息
学习
信息
内容
就是
文件
文档
模块
用户
便捷
功能
基础
字体
官方
工具
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
持续性数据库
怎么删除分离的数据库
网络技术支持协议书范本
服务器电源转接普通机能用吗
思讯数据库下载地址
安卓短信导入苹果数据库
小学生关于网络安全画报
软件开发培训学校村
vue的组件存放数据库
火币钱包私钥在服务器吗
深圳小程序软件开发哪家好
csgo啥是官方服务器
贵州服务器电源价钱多少
成都昆腾软件开发有限公司 许
周北辰网络安全
你是如何看待网络安全工作的
数据库技术面临挑战
免费国外代理服务器
网络技术与平面设计选择
教育技术学计算机网络技术
和平精英高配置的服务器
软件开发公司 会计核算
景安免费云服务器
桌面美化软件开发java
行业网络存储服务器
怎么评估软件开发成本
谁可以查询金融信息基础数据库
鄂州企业网络安全
互联网科技与创意
数据库表单追加大量数据