# coding=utf8
from __future__ import unicode_literals
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
try:
from tkinter import messagebox
except ImportError:
import tkMessageBox as messagebox
from io import open
class CounterLabel(tk.Label):
"""可计数的标签
"""
def __init__(self, parent, init_value=0, step=1, **kwargs):
self._count_value = tk.IntVar()
self._count_value.set(init_value)
tk.Label.__init__(self, parent, textvariable=self._count_value, **kwargs)
self._step = step
def increase(self, step=None):
step = step or self._step
self._count_value.set(self._count_value.get() + step)
def decrease(self, step=None):
step = step or self._step
self._count_value.set(self._count_value.get() - step)
def set_counter_value(self, value=0):
self._count_value.set(value)
@property
def count_value(self):
return self._count_value.get()
class TimerLabel(CounterLabel):
"""可自动计数的标签控件,默认一秒一次
"""
def __init__(self, parent, **kwargs):
CounterLabel.__init__(self, parent, **kwargs)
self._state = False
self._timer_id = None
def _timer(self):
if self._state:
self.increase()
self._timer_id = self.after(1000, self._timer)
def start_timer(self):
if not self._state:
self._state = True
self._timer()
def stop_timer(self):
self._state = False
if self._timer_id:
self.after_cancel(self._timer_id)
self._timer_id = None
def reset(self):
self.stop_timer()
self.set_counter_value()
@property
def state(self):
return self._state
class MapParamsInputDialog(tk.Toplevel):
def __init__(self, parent, modal=True, callback=None, initial=None):
tk.Toplevel.__init__(self, parent)
initial = initial or {'width': 10, 'height': 10, 'mine_number': 10}
self.height = tk.IntVar(value=initial['height'])
self.width = tk.IntVar(value=initial['width'])
self.mine_number = tk.IntVar(value=initial['mine_number'])
self.validate_msg = tk.StringVar()
self.create_widgets()
self.parent = parent
self.title('请输入新地图的参数')
self.bind('<Return>', self.bind_quit) # dismiss dialog
self.bind('<Escape>', self.bind_quit) # dismiss dialog
self.callback = callback
if modal:
self.geometry("=%dx%d+%d+%d" % (200, 130, parent.winfo_rootx() + 10, parent.winfo_rooty() + 10))
self.transient(parent)
self.grab_set()
self.wait_window()
def create_widgets(self):
frame = tk.Frame(self)
frame.pack(side=tk.TOP, expand=tk.TRUE, fill=tk.BOTH)
tk.Label(frame, text='地图高度').grid(column=0, row=0)
tk.Entry(frame, textvariable=self.height).grid(column=1, row=0)
tk.Label(frame, text='地图宽度').grid(column=0, row=1)
tk.Entry(frame, textvariable=self.width).grid(column=1, row=1)
tk.Label(frame, text='地雷数目').grid(column=0, row=2)
tk.Entry(frame, textvariable=self.mine_number).grid(column=1, row=2)
tk.Entry(frame, fg='#FF0000', textvariable=self.validate_msg, state=tk.DISABLED).grid(column=0, row=3,
columnspan=2)
tk.Button(frame, text='确定', command=self.ok).grid(column=0, row=4, ipadx=10)
tk.Button(frame, text='取消', command=self.quit).grid(column=1, row=4, ipadx=10)
def quit(self):
self.destroy()
def bind_quit(self, event):
self.quit()
def ok(self):
if self.callback:
try:
height, width, mine_number = int(self.height.get()), int(self.width.get()), int(self.mine_number.get())
except ValueError:
self.validate_msg.set('请输入整数!')
return
if height < 3 or width < 3:
self.validate_msg.set('地图长度必须大于等于3!')
return
if mine_number < 0 or height * width <= mine_number:
self.validate_msg.set('地图数目范围不正确!')
return
self.validate_msg.set('')
map_params_dict = {
'height': height,
'width': width,
'mine_number': mine_number
}
self.destroy()
self.callback(self.parent, map_params_dict)
class MessageLabel(tk.Label):
def splash(self, text):
self.config({'text': text})
self.after(700, self._clear)
def _clear(self):
self.config({'text': ''})
class TextViewer(tk.Toplevel):
def __init__(self, parent, title, text, modal=True):
tk.Toplevel.__init__(self, parent)
self.configure(borderwidth=5)
self.geometry("=%dx%d+%d+%d" % (625, 500, parent.winfo_rootx() + 10, parent.winfo_rooty() + 10))
self.bg = '#ffffff'
self.fg = '#000000'
self.title(title)
self.protocol("WM_DELETE_WINDOW", self.ok)
self.parent = parent
self.bind('<Return>', self.ok)
self.bind('<Escape>', self.ok)
# create widgets
frame_text = tk.Frame(self, relief=tk.SUNKEN, height=700)
frame_text.pack(side=tk.TOP, expand=tk.TRUE, fill=tk.BOTH)
scroll_view = tk.Scrollbar(frame_text, orient=tk.VERTICAL, takefocus=tk.FALSE, highlightthickness=0)
self.text_view = tk.Text(frame_text, wrap=tk.WORD, highlightthickness=0, fg=self.fg, bg=self.bg)
scroll_view.config(command=self.text_view.yview)
self.text_view.config(yscrollcommand=scroll_view.set)
scroll_view.pack(side=tk.RIGHT, fill=tk.Y)
self.text_view.pack(side=tk.LEFT, expand=tk.TRUE, fill=tk.BOTH)
frame_buttons = tk.Frame(self)
tk.Button(frame_buttons, text='确定', command=self.ok, takefocus=tk.FALSE).pack()
frame_buttons.pack(side=tk.BOTTOM, fill=tk.X)
# init text
self.text_view.focus_set()
self.text_view.insert(0.0, text)
self.text_view.config(state=tk.DISABLED)
if modal:
self.transient(parent)
self.grab_set()
self.wait_window()
def ok(self, event=None):
self.destroy()
def view_file(parent, title, filename, modal=True):
try:
text_file = open(filename, 'r', encoding='utf-8')
except IOError:
messagebox.showerror(title='File Load Error', message='Unable to load file %r .' % filename, parent=parent)
else:
return TextViewer(parent, title, text_file.read(), modal)
没有合适的资源?快使用搜索试试~ 我知道了~
Python大作业扫雷游戏源代码(高分项目).zip
共10个文件
py:7个
pyw:1个
ico:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 3 浏览量
2023-08-31
08:50:15
上传
评论 6
收藏 23KB ZIP 举报
温馨提示
Python大作业扫雷游戏源代码(高分项目).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!小白也可实战,放心下载使用。 Python大作业扫雷游戏源代码(高分项目).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!小白也可实战,放心下载使用。Python大作业扫雷游戏源代码(高分项目).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!小白也可实战,放心下载使用。Python大作业扫雷游戏源代码(高分项目).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!小白也可实战,放心下载使用。Python大作业扫雷游戏源代码(高分项目).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!小白也可实战,放心下载使用。Python大作业扫雷游戏源代码(高分项目).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!小白也可实战,放心下载使用
资源推荐
资源详情
资源评论
收起资源包目录
Python编写的扫雷游戏.zip (10个子文件)
主文件夹
setup.py 981B
minesweeper
__init__.py 0B
helpers.py 2KB
resource
images
mine.ico 26KB
app_tk.pyw 9KB
static.py 2KB
core.py 6KB
widgets.py 7KB
test.py 5KB
.gitignore 1KB
共 10 条
- 1
资源评论
- zmzhang_20032024-06-25感谢大佬,让我及时解决了当下的问题,解燃眉之急,必须支持!
- 我是狗吗2024-04-23资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
- Flash1362023-12-03资源有一定的参考价值,与资源描述一致,很实用,能够借鉴的部分挺多的,值得下载。
盈梓的博客
- 粉丝: 9285
- 资源: 2203
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功