之前已经写了一个简单的控制台版本爬虫+抽卡程序,可以自己过瘾地抽王者荣耀皮肤。

花果山美男子:python自制王者荣耀抽卡程序​zhuanlan.zhihu.com

今天我们就在它的基础上,做一个tkinter版本,顺便复习一下tkinter的相关知识。

主要的功能就是随机抽卡+保存图片,另外加一个只能抽三次和只能保存一张图片的限制。信息输出用tkinter的Text控件实现,图片显示则用Label控件。

首先创建界面主体,并令其居中显示(因为其间用到了messagebox,这个控件默认显示在屏幕中间且无法更改,为了美观只能手动让主界面也居中了)。

#定位屏幕中心
def center_window(w, h):# 获取屏幕 宽、高ws = top.winfo_screenwidth()hs = top.winfo_screenheight()# 计算 x, y 位置x = (ws/2) - (w/2)y = (hs/2) - (h/2)top.geometry('%dx%d+%d+%d' % (w, h, x, y))top = tkinter.Tk()
top.title('王者荣耀')
center_window(800,500)
#用来计抽卡和保存次数的全局变量
count,count2=0,0
#抽到的英雄名称,这里也设为全局,为了同时用于保存的图片名称
res=""

接下来是实现抽卡并显示图片和保存图片的两个函数:

#抽卡并显示,方法和上篇文章类似
def showImg():global count,rescount += 1if count > 3:tkinter.messagebox.showerror("错误", "每天只能抽三次!")return 0path = glob.glob("C:/Users/lin042/Desktop/wangzhe/*/*.jpg") #上篇文章中爬取的图片,将每张图片的路径一起存储到列表pathnum = len(path)-1i = random.randint(0,num)pic = path[i]  #随机得到列表中的第i个元素,即为随即图片的路径res = ''.join(re.findall('[u4e00-u9fa5]',pic))  #获取英雄名称(字符串中仅有的中文)namenum = pic[-5]  #倒数第五位是图片名称(*.jpg),也就是编号,这里用于保存时的命名#下面是将图片显示在label控件中,同时更新text中的信息load = Image.open(pic)load = load.resize((720, 380),Image.ANTIALIAS)  #缩放图片render = ImageTk.PhotoImage(load)t.delete(0.0,END)  #清空文本框t.insert(END,"恭喜你抽到了"+ res +"!")  #插入新信息res = res + namenum  #此时res为英雄名称+编号,用于保存img.config(image=render)  #刷新图片img.image = render  #保存图片
def saveImg():global count2count2 += 1if count2 > 1:tkinter.messagebox.showerror("错误", "您只能保存一张!")return 0a = tkinter.messagebox.askyesno('提示', '只有一次保存机会哦!')  #yes返回True,no返回Falseif a:file_path = 'C:/Users/lin042/Desktop/'  #桌面路径saveimg = img.image saveimg._PhotoImage__photo.write(file_path+res+'.png')   #这里只能保存成png,不能保存jpgtkinter.messagebox.showinfo(title = '成功!',message='已保存到桌面!')else:count2 -= 1pass

最后设置button按钮并布局(这里是用place方法实现,可以随意设置位置,但美不美观就要自己试了):

submit_button = tkinter.Button(top, text ="随机抽卡", font=('黑体', 10),fg='red',width=10,height=2,command = showImg)
submit_button.place(x=300, y=10)submit_button2 = tkinter.Button(top, text ="保存图片", font=('黑体', 10),fg='red',width=10,height=2,command = saveImg)
submit_button2.place(x=400, y=10)t = tkinter.Text(width=25, height=1.5)
t.place(x=300, y=55)img = tkinter.Label(image='')
img.place(x=40, y=95)top.mainloop()

其中有几个注意事项:

1.t.insert(END,"恭喜你抽到了"+res+"!")

这是在文本框末尾插入文本,但要想用到END关键字,必须在导入时用from tkinter import *,而不是import tkinter

2.saveimg._PhotoImage__photo.write(file_path+res+'.png')

ImageTk.PhotoImage类型的图片在保存时只能用_PhotoImage__photo.write的方法,其他保存图片的方法都会报错;同时图片不能保存为jpg,但png和gif是可以的。

注:文中保存的是缩放后的图片,不是原图。

下面是完整代码:

import glob
from PIL import Image
import random
import re
from tkinter import *
import tkinter.messagebox
from PIL import Image, ImageTkdef center_window(w, h):# 获取屏幕 宽、高ws = top.winfo_screenwidth()hs = top.winfo_screenheight()# 计算 x, y 位置x = (ws/2) - (w/2)y = (hs/2) - (h/2)top.geometry('%dx%d+%d+%d' % (w, h, x, y))top = tkinter.Tk()
top.title('王者荣耀')
center_window(800,500)
count,count2=0,0
res=""def showImg():global count,rescount+=1if count > 3:tkinter.messagebox.showerror("错误", "每天只能抽三次!")return 0path = glob.glob("C:/Users/lin042/Desktop/wangzhe/*/*.jpg")num = len(path)-1i = random.randint(0,num)pic=path[i]#.replace('','/')res = ''.join(re.findall('[u4e00-u9fa5]',pic))num=pic[-5]load = Image.open(pic)load = load.resize((720, 380),Image.ANTIALIAS)render = ImageTk.PhotoImage(load)t.delete(0.0,END)t.insert(END,"恭喜你抽到了"+res+"!") res=res+numimg.config(image=render)img.image = render  def saveImg():global count2count2+=1if count2 > 1:tkinter.messagebox.showerror("错误", "您只能保存一张!")return 0a=tkinter.messagebox.askyesno('提示', '只有一次保存机会哦!')if a:file_path = 'C:/Users/lin042/Desktop/'saveimg = img.image saveimg._PhotoImage__photo.write(file_path+res+'.png')   tkinter.messagebox.showinfo(title = '成功!',message='已保存到桌面!')else:count2-=1passsubmit_button = tkinter.Button(top, text ="随机抽卡", font=('黑体', 10),fg='red',width=10,height=2,command = showImg)
submit_button.place(x=300, y=10)
submit_button2 = tkinter.Button(top, text ="保存图片", font=('黑体', 10),fg='red',width=10,height=2,command = saveImg)
submit_button2.place(x=400, y=10)
t = tkinter.Text(width=25, height=1.5)
t.place(x=300, y=55)
img = tkinter.Label(image='')
img.place(x=40, y=95)top.mainloop()

至于最后的效果,我录制了一个小视频:

抽抽抽!https://www.zhihu.com/video/1237436252564877312

如果嫌抽的不过瘾,那就取消次数限制,独自爽上一天吧!然后统计一下,抽了一百次以后,哪个英雄抽到的次数最多,从此以后他就是你的本命英雄了!

当然,你也可以让女朋友来抽,她抽到什么皮肤,就送她什么(我劝你先把抽卡次数限制为1……)

tkinter label_tkinter版自制王者荣耀抽卡程序相关推荐

  1. 小刘总——王者荣耀抽荣耀水晶玄学

    转眼间打王者四年多了,也上了三赛季王者,各种模式都打烂了,但惟有一个领域没有触及,就是荣耀水晶,我向来不屑于抽奖,虽然贵族等级马上v7了,但是基本从来没有用点券买积分去抽水晶,只是靠着那些充值赠送和战 ...

  2. 最新云开发王者荣耀查询小程序源码

    正文: 最新云开发王者荣耀查询小程序源码,是最近刚出来的,无需数据库,无需服务器即可搭建,因为是云开发的,程序仅几百KB而已. 下载方式: lanzou.com/iBfac029a3di

  3. 小米玩王者荣耀服务器未响应,小米8屏幕指纹版打王者荣耀游戏出现严断流没信号和460延迟...

    小米8屏幕指纹版手机在打这个王者荣耀游戏的出现严重的断流没信号和460延迟啊,真是不能接受啊, 不知道大家有没有这样的同象,问题太严重了吧,一步一卡,卡的不行不行的,突然就460,几秒后又跳回来,用小 ...

  4. 王者荣耀服务器卡顿修复了吗,王者荣耀太卡了怎么办?王者荣耀fps设置技巧

    fps可以在游戏的时候通过设置打开显示,指的是游戏帧数,一般王者荣耀30-60之间为宜,其数值与很多因素有关,先说一下,王者荣耀游戏中本身没有直接设置fps的设置,只能通过侧面的调整设置来调整fps值 ...

  5. idea卡顿的解决方法_《王者荣耀》卡顿及无法下载资源解决方法说明 5周年祈愿活动出错了怎么办...

    导读 王者荣耀5周年祈愿活动出错了怎么处理?在王者荣耀的游戏中,5周年祈愿活动会让玩家回答两个问题,回答正确的玩家将 有机会获得永久英雄和皮肤,但是玩家在更新版本的过程中却遇到卡顿及无法下载资源的问题 ...

  6. 腾讯王者服务器性能,性能飙升!腾讯这一技术将使王者荣耀告别卡顿!

    王者荣耀是腾讯旗下的一款现象级的国民手机游戏,自发布以来,迅速占领了各大手机游戏下载榜榜首的位置,游戏热度一直居高不下.但是随着版本的不断更迭,王者荣耀这款游戏的画面精细程度和技能打斗场景的复杂程度越 ...

  7. 王者荣耀服务器卡顿修复了吗,王者荣耀新版太卡?一招设置让运行流畅飞起

    最近,<王者荣耀>更新"王者出征"全新版本,在游戏世界观的建构和游戏玩法等方面都有巨大的革新,在画面技术上,更是运用了次时代技术,使得王者峡谷环境和英雄整体呈现出更真实 ...

  8. 王者荣耀:从程序员的角度解密王者荣耀,专业术语把院长看懵了

    农药自从上线以来,依靠着强大的产品力以及腾讯的运营能力,在游戏市场上表现可谓是风生水起,根据第三方的调研数据显示,<王者荣耀>渗透率达到22.3%,用户规模达到2.01亿人,每日的日活跃用 ...

  9. python面向对象实例王者荣耀_大牛程序员利用Python开发王者荣耀带妹神器,一路直奔上王者...

    王者荣耀 -很火的手游-简直老少通吃-令人发指-虽然操作简单-但为什么你还是会被虐, 其实 是有技巧的--本文Python大神带你研究王者荣耀各类英雄的出装小技巧,让你成为大神般的存在 前期准备 环境 ...

最新文章

  1. 基于区块链交易技术开发的证券
  2. cat--创建多维数组
  3. 计算机中,文本文件和二进制文件的区别
  4. 主要推荐系统算法总结及Youtube深度学习推荐算法实例概括
  5. proteus 8.4安装教程
  6. linux下源码安装nginx
  7. [洪流学堂]Hololens修改图标icon
  8. 自定义Behavior 实现Listbox自动滚动到选中项
  9. 【微信小程序开发】 踩坑 抽奖幸运大转盘 完美实战
  10. 如何编写游戏辅助工具
  11. android checkboxpreference属性,如何更改android中CheckBoxPreference标题的文本颜色?
  12. Eclipse官方下载及配置流程
  13. Windows对话框
  14. 服务器防火墙firewalld,指定端口开放
  15. 情有独钟,迷情电子三五年(七)
  16. 【欢迎来怼】 Beta发布事后诸葛亮会议
  17. DAX: 用SWITCH函数替换嵌套IF函数
  18. 谷歌测试工具_使用Google网站优化工具进行A / B测试的指南
  19. MySQL--基础知识点--64--等值连接/自连接/自然连接/外连接
  20. 1.有四个数字:1,2,3,4能组成多少个互不相同且无重复数字的三位数?各是多少?

热门文章

  1. 从html富文本中提取纯文本
  2. Thread线程notify方法的自我理解
  3. jenkins使用流程
  4. ios实例开发精品文章推荐(8.14)
  5. 采用cookie简单实现文章顶/踩功能
  6. oracle实例创建失败,【求助】急!!!!oracle客户端安装时创建实例失败
  7. 下载最新adb(platform-tools)
  8. android 恢复出厂设置代码流程(Good!)
  9. tensorflow之读取jpg图像长和宽
  10. 计算机基础(九):C语言基础知识小结