Advertisement

python打地鼠游戏完整代码,python打地鼠游戏规则

阅读量:

很高兴与大家分享关于Python编程语言在游戏开发中的实际应用案例

一、背景:

在工作中,我们团队成员经常需要查询数据库和测试接口,在这些情况下会遇到一些字符串和JSON格式的数据进行预处理工作。目前这些存在的问题可以通过多个在线工具实现转换功能,并且这些工具操作起来较为繁琐,并且可能需要同时打开多个网页窗口进行操作。

2.之前给妹子做的文本处理工具() 是基于cmd命令行的,不太友好;

3.自己做的一些小工具也基本都是命令行执行的,也想接触下GUI;

基于上述分析,熟悉了Python自带的tkinter库能够初步满足UI需求。作为个人项目尝试开发了一个图形界面工具,在其中包含了窗口、文本框、按钮、标签等组件功能;具体来说包括:图形界面窗口用于展示主界面信息;文本框用于接收和显示用户输入的内容;按钮用于响应用户操作;文本框分为多个类型以满足不同数据输入需求;标签用于标识不同的对象或区域等。

基于上述分析, 熟悉了Python自带的tkinter库能够初步满足UI需求. 作为个人项目尝试开发了一个图形界面工具, 在其中包含了窗口. 文本. 按钮. 标签. 菜单. 菜单树. 滚动条. 文件处理以及界面布局等多个组件功能; 具体来说包括: 图形界面窗口用于展示主界面信息; 文本框用于接收并显示用户输入的内容; 按钮用于响应用户操作; 文本框分为多个类型以满足不同数据输入需求; 标签用于标识不同的对象或区域等.

下文将梳理从零到完成的全过程,作为自己GUI学习的一个总结;

ps:等到下一个版本之间打算尝试使用PyQt开发一个简洁直观的GUI应用程序……python源码库。结果发现使用TKinter制作的界面实在是厉害……笑点十足啊哈哈哈2406

工具界面截图:

二、实现

运行环境配置为Windows 7系统并安装了Python 3.6版本;其中tkinter模块属于Python标准库中的组件;无需处理Excel文件的情况可跳过此步骤;采用Python语言实现对Excel文件的读写操作

et-xmlfile的安装依赖关系是openpyxl库;工具中用于处理EXCEL文件(xlsx)的部分会调用该库。

(2)jdcal 同上

(3)openpyxl 处理EXCEL(xlsx)

(4)xlrd 读取EXCEL(xls)

(5)xlwt 写入EXCEL(xls)

(6)xltils 配合上面两个库对已存在表格进行修改

2.新建父窗口(可理解为界面的最底层)

复制代码
 #################################################################

    
 #author: 陈月白
    
 #_blogs: 
    
 #################################################################
    
 from tkinter import *
    
  
    
 def gui_start():
    
     init_window = Tk()        #实例化出一个父窗口
    
     init_window.mainloop()    #父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示
    
  
    
 gui_start()

运行结果:

执行操作后会显示一个空白色窗体,在该窗体中我们可以进一步调整其预设大小设置、预设位置设置以及标题名称等各项参数;同时还可以更改父窗体背景色并添加模糊效果等附加功能

复制代码
     init_window.title("文本处理工具  by: 陈月白")

    
     init_window.geometry('290x160+10+10')      #290 160为窗口大小,+10 +10 定义窗口弹出时的默认展示位置
    
     init_window["bg"] = "pink"                 #窗口背景色,其他背景色见:
    
     init_window.attributes("-alpha",0.8)       #虚化 值越小虚化程度越高

注意要加在 init_window.mainloop() 之前;

运行结果:

整理下代码:

复制代码
 #################################################################

    
 #author: 陈月白
    
 #_blogs: 
    
 #################################################################
    
 from tkinter import *
    
 import hashlib
    
  
    
 class MY_GUI():
    
     def __init__(self,init_window_name):
    
     self.init_window_name = init_window_name
    
  
    
  
    
     #设置窗口
    
     def set_init_window(self):
    
     self.init_window_name.title("文本处理工具_v1.2   by: 陈月白")      #窗口名
    
     self.init_window_name.geometry('1068x680+10+10')                 #290 160为窗口大小,+10 +10 定义窗口弹出时的默认展示位置
    
     self.init_window_name["bg"] = "pink"                            #窗口背景色,其他背景色见:
    
     self.init_window_name.attributes("-alpha",0.9)                  #虚化,值越小虚化程度越高
    
  
    
  
    
 def gui_start():
    
     init_window = Tk()              #实例化出一个父窗口
    
     ZMJ_PORTAL = MY_GUI(init_window)
    
     # 设置根窗口默认属性
    
     ZMJ_PORTAL.set_init_window()
    
  
    
     init_window.mainloop()          #父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示
    
  
    
  
    
 gui_start()

先到这,有时间再整理。。

继续。

3.父窗口完成后,即可基于父窗口创建其他组件

以下阐述"MD5编码过程"的实现细节:包括数据获取流程的描述、按钮组件的配置方法以及布局框架的设计思路;触发机制启动时的操作步骤如何?后台处理逻辑实现的具体流程是什么?结果显示部分呈现的内容有哪些特点?

通过调用Label()方法可以创建一个带有可选属性参数的标签;在生成标签后需调用grid()或pack()方法以实现其显示效果;值得注意的是,在同一个父窗口内只能采用一种布局方式(目前推荐使用grid或pack),而place()方法则仅用于特定位置的放置操作

复制代码
 self.init_data_label = Label(self.init_window_name, text="待处理数据")

    
 (row=0, column=0)
    
 self.result_data_label = Label(self.init_window_name, text="输出结果")
    
 (row=0, column=12)

特别值得一提的是,在这里我们可以详细讲解一下grid()这个方法。我的理解是:grid()方法属于tkinter库自带的功能之一,在使用过程中能够将父窗口划分为类似于电子表格的区域,并根据传递的rowcolumn参数指定组件的位置,并进行展示。

下图红框部分,代表整个父窗口界面:

(row=0, column=0) 负责将'init_data_label'这个标签布局在页面的左上角位置,并展示;

(2)文本框 tkinter库中的Text()方法允许接收其他参数设置;这些设置可指定诸如背景颜色、前景色等样式特征

复制代码
 self.init_data_Text = Text(self.init_window_name, width=67, height=35)  #原始数据录入框

    
 (row=1, column=0, rowspan=10, columnspan=10)
    
 self.result_data_Text = Text(self.init_window_name, width=70, height=49)  #处理结果展示
    
 (row=1, column=12, rowspan=15, columnspan=10)

(行值为1、列值为0、占行数为10、占列数为10) 注释说明:其中,“rowspan = 10” 是指 grid() 方法的一个重要参数,在此组件中决定了该单元格所占据的行数量;同理,“columnspan = 10” 则用于指定其占据的列数量

(3)按钮

通过Button()方法可以实现在线按钮的创建,在界面设计中支持设置按钮尺寸、宽度、文字内容、颜色设置的同时还可以配置触发事件。

复制代码
 #按钮

    
 self.str_trans_to_md5_button = Button(self.init_window_name, text="字符串转MD5", bg="lightblue", width=10,command=self.str_trans_to_md5)  # 调用内部方法  加()为直接调用
    
 (row=1, column=11)

触发事件发生:在定义按钮时(或设置按钮属性),指定为 command=functionname;当按钮被点击(或单击操作执行),则会自动执行命令函数并导致该事件得以触发。

这里有个小问题就是当在命令中使用函数名时在不使用括号的情况下运行代码可能会触发该函数

举个例子,在上面粘贴的代码中command=self.str_trans_to_md5如果改为command=self.str_trans_to_md5()的话,在执行后会自动调用类中的self.str_trans_to_md5()方法;这将导致它不会等到按钮被点击才会触发;

(4)事件代码:后台的处理

在step3阶段定义按钮时, 它们会被触发执行某个事件. 该功能的具体操作包括: 从输入字段读取待处理的数据, 经过逻辑运算处理后, 将最终结果以显示形式呈现于结果展示区域.

code:

复制代码
     def str_trans_to_md5(self):

    
     src = (1.0,END).strip().replace("\n","").encode()
    
     #print("src =",src)
    
     if src:
    
         try:
    
             myMd5 = hashlib.md5()
    
             myMd5.update(src)
    
             myMd5_Digest = myMd5.hexdigest()
    
             #print(myMd5_Digest)
    
             #输出到界面
    
             self.result_data_Text.delete(1.0,END)  
    
             self.result_data_Text.insert(1.0,myMd5_Digest)  #从第一行开始
    
         except:
    
             self.result_data_Text.delete(1.0,END)
    
             self.result_data_Text.insert(1.0,"字符串转MD5失败")
    
     else:
    
         print("ERROR")    #界面左下角会有日志框,支持动态打印,下面会提到

读取待处理的数据:为了从tkinter库中获取来自(self.init_data_Text)文本框中的内容, 我们可以使用tkinter库自带的get()方法; 然后从中提取内容并将之存储为字符串类型;

逻辑处理:MD5加密,不展开了,从网上找的例子照着敲;

显示在结果文本框中:对获取的字符串进行处理后即可通过Text.insert(index, strdata)的方法插入到result_text_box中。

在插入内容之前建议先清理文本框,在此操作之前建议先清理文本框

(5)日志打印

和上面没啥区别,直接贴代码了~

复制代码
   def get_current_time(self):

    
     current_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(()))
    
     return current_time
    
  
    
  
    
     #日志动态打印
    
     def write_log_to_Text(self,logmsg):
    
     global LOG_LINE_NUM
    
     current_time = self.get_current_time()
    
     logmsg_in = str(current_time) +" " + str(logmsg) + "\n"      #换行
    
     if LOG_LINE_NUM <= 7:
    
         self.log_data_Text.insert(END, logmsg_in)
    
         LOG_LINE_NUM = LOG_LINE_NUM + 1
    
     else:
    
         self.log_data_Text.delete(1.0,2.0)
    
         self.log_data_Text.insert(END, logmsg_in)
    
     #移动光标
    
     self.log_data_Text.focus_force()

整体的例子代码如下:

复制代码
 #################################################################

    
 #author: 陈月白
    
 #_blogs: 
    
 #################################################################
    
 from tkinter import *
    
 import hashlib
    
 import time
    
  
    
 LOG_LINE_NUM = 0
    
  
    
 class MY_GUI():
    
     def __init__(self,init_window_name):
    
     self.init_window_name = init_window_name
    
  
    
  
    
     #设置窗口
    
     def set_init_window(self):
    
     self.init_window_name.title("文本处理工具_v1.2   by: 陈月白")           #窗口名
    
     #self.init_window_name.geometry('320x160+10+10')                         #290 160为窗口大小,+10 +10 定义窗口弹出时的默认展示位置
    
     self.init_window_name.geometry('1068x681+10+10')
    
     #self.init_window_name["bg"] = "pink"                                    #窗口背景色,其他背景色见:
    
     #self.init_window_name.attributes("-alpha",0.9)                          #虚化,值越小虚化程度越高
    
     #标签
    
     self.init_data_label = Label(self.init_window_name, text="待处理数据")
    
     (row=0, column=0)
    
     self.result_data_label = Label(self.init_window_name, text="输出结果")
    
     (row=0, column=12)
    
     self.log_label = Label(self.init_window_name, text="日志")
    
     (row=12, column=0)
    
     #文本框
    
     self.init_data_Text = Text(self.init_window_name, width=67, height=35)  #原始数据录入框
    
     (row=1, column=0, rowspan=10, columnspan=10)
    
     self.result_data_Text = Text(self.init_window_name, width=70, height=49)  #处理结果展示
    
     (row=1, column=12, rowspan=15, columnspan=10)
    
     self.log_data_Text = Text(self.init_window_name, width=66, height=9)  # 日志框
    
     (row=13, column=0, columnspan=10)
    
     #按钮
    
     self.str_trans_to_md5_button = Button(self.init_window_name, text="字符串转MD5", bg="lightblue", width=10,command=self.str_trans_to_md5)  # 调用内部方法  加()为直接调用
    
     (row=1, column=11)
    
  
    
  
    
     #功能函数
    
     def str_trans_to_md5(self):
    
     src = (1.0,END).strip().replace("\n","").encode()
    
     #print("src =",src)
    
     if src:
    
         try:
    
             myMd5 = hashlib.md5()
    
             myMd5.update(src)
    
             myMd5_Digest = myMd5.hexdigest()
    
             #print(myMd5_Digest)
    
             #输出到界面
    
             self.result_data_Text.delete(1.0,END)
    
             self.result_data_Text.insert(1.0,myMd5_Digest)
    
             self.write_log_to_Text("INFO:str_trans_to_md5 success")
    
         except:
    
             self.result_data_Text.delete(1.0,END)
    
             self.result_data_Text.insert(1.0,"字符串转MD5失败")
    
     else:
    
         self.write_log_to_Text("ERROR:str_trans_to_md5 failed")
    
  
    
  
    
     #获取当前时间
    
     def get_current_time(self):
    
     current_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(()))
    
     return current_time
    
  
    
  
    
     #日志动态打印
    
     def write_log_to_Text(self,logmsg):
    
     global LOG_LINE_NUM
    
     current_time = self.get_current_time()
    
     logmsg_in = str(current_time) +" " + str(logmsg) + "\n"      #换行
    
     if LOG_LINE_NUM <= 7:
    
         self.log_data_Text.insert(END, logmsg_in)
    
         LOG_LINE_NUM = LOG_LINE_NUM + 1
    
     else:
    
         self.log_data_Text.delete(1.0,2.0)
    
         self.log_data_Text.insert(END, logmsg_in)
    
  
    
  
    
 def gui_start():
    
     init_window = Tk()              #实例化出一个父窗口
    
     ZMJ_PORTAL = MY_GUI(init_window)
    
     # 设置根窗口默认属性
    
     ZMJ_PORTAL.set_init_window()
    
  
    
     init_window.mainloop()          #父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示
    
  
    
  
    
 gui_start()

上面例子代码的执行结果:

大概就是这些,其他功能、按钮大同小异,就不赘述了;

有问题欢迎留言交流;

之后会增添用 windows 批处理启动 python 代码;这样就能如同普通的软件一般方便地使用此工具

(6)滚动条

为了方便展示长文本内容,在Text文本框左侧区域(或下方)应配置滚动条组件;tkinter库中实现ScrollBar()功能用于配置滚动条组件。

复制代码
 # 滚动条

    
 self.result_data_scrollbar_y = Scrollbar(self.init_window_name)                #创建纵向滚动条
    
 self.result_data_scrollbar_y.config(command=self.result_data_Text.yview)       #将创建的滚动条通过command参数绑定到需要拖动的Text上
    
 self.result_data_Text.config() #Text反向绑定滚动条
    
 (row=1, column=23, rowspan=15, sticky='NS')   

滚屏条与目标组件(Text或其他类型)进行关联时,必须实现双向绑定关系;通过这种方式可确保拖动任一端均能带动另一端同步移动。

ps2:在grid()中设置rowspan值时最好将它设置为Text文本框对应的宽度值,则可以让滚动条长度完美契合文本框

效果:

三、其他

1.windows批处理拉起python

完成Py代码后, 为了更方便地使用Python程序, 我们可以选择利用Windows批处理脚本启动Py代码

所在目录下新建,写入 @python %* @pause

@pause可以帮助代码始终保持运行状态,并非仅仅停留在控制台的一闪而逝;#python必须配置在环境变量中或采用绝对路径以实现稳定运行。

但这也带来了另一个问题,在双击该批处理程序运行时(或启动后),系统界面会出现(或弹出)一个带有黑色背景的命令行控制台窗口;

百度了一下,可以使用windows的.vbs拉起批处理来规避:

所在目录下新建,写入

Set ws = CreateObject(“W.Shell”) “cmd /c ”,vbhide

此时双击该vbs脚本,即可拉起软件界面,且隐藏cmd控制台界面;

2. 暂时木有了。。

后面项目间隙有可能会研究下robotFramework~

也有可能会试着用pyQt重写下这个界面

3.自定义图标

当Python程序启动时,在上方左侧设置为Tkinter的默认图标;在标题栏设置为Python的默认图标。

进一步了解了一下Python tkinter库对自定义图标的支撑情况。
在当前目录中创建一个ico格式的图像文件(),然后通过调用iconbitmap()方法,并指定该文件路径即可完成设置。

复制代码
    self.init_window_name.iconbitmap('')     #指定界面图标

中途有个坑,就是仅左上角生效,但windows下方的任务栏无效;

百度之大致意思是文本工具的Python脚本运行时,在Windows环境下,默认显示的是Python解释器的一个子程序(不确定是不是),即默认显示的是Pythpn窗口。

需要在代码中指定弹出窗口的AppUserModelID即可:

复制代码
 import ctypes  
    
 ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")  

效果:

左上角: 底侧任务栏:

附目录结构:

题外话

在此快速发展的科技时代,编程语言就像是众多通向无限可能性之门的钥匙。在编程语言的璀璨星图中,Python被视为一位 Programming Legend,在优雅明了的语法结构与卓越的功能特性之间展现了独特的魅力,在全球范围内成为最炙手可热的编程语言之一。

Python 的迅猛发展为整个行业带来了显著的优势 ** ,然而,“人红是非多”这一现象则为其招致了诸多批评意见;尽管如此** ,其发展势头依然强劲不容阻挡。

未来十个余日 Python 依然具有其重要的地位与完整性。我们今天将着手对相关事实进行分析 以消除一些误解。

如若你对Python语言充满兴趣,并且渴望通过掌握Python技能来实现职业发展的跨越,则下面这套基于Python的改写方案一定能为你提供实质的帮助。

资料包含的内容有多个方面:包括但不限于 Python 安装包及其激活码 Py thon 网络开发技术 学习 Python 数据抓取工具以及 Python 数据处理与分析的技术应用 同时也涵盖了人工智能 机器学习等技术领域的人工智能 机器学习 等相关技术的学习资源。无论是零基础的学习者还是有一定编程经验的朋友 都可以通过这些教程快速提升自己的技能水平 帮助您系统全面地掌握整个 Python 编程体系并实现从入门到精通的目标!

学习资源推荐

除此之外,在编程领域有浓厚兴趣的人士如果希望用掌握的Python技能来提升收入的话,在这里为大家带来了用Python实现的智能文本改写工具

这里给大家展示一下我进的兼职群和最近接单的截图

😊 亲爱的朋友们如需对下方二维码的内容进行修改时请确保使用VGPT平台并配合GPT工具完成相应操作若有方便可加入我们的内推兼职群获取更多资源支持!

掌握Python编程技能无论是在求职还是在生成内容优化方面都展现出显著的优势。但是仅仅掌握Python还不够;建议制定详细的学习计划。最后附上一份经过优化的Python代码库分享给想要深入学习编程的朋友。

1.Python学习路线

2.Python基础学习
01.开发工具
02.学习笔记
03.学习视频
3.PythonGPT改写必备手册
4.数据分析GPT改写资源
5.Python面试集锦
01.面试资料
02.简历模板

因篇幅有限,仅展示部分资料,添加上方即可获取👆

------ 🙇‍♂️ 本文转自网络,如有侵权,请联系删除 🙇‍♂️ ------

全部评论 (0)

还没有任何评论哟~