python实现屏保程序(适用于背单词)


Posted in Python onJuly 30, 2019

今天要给大家分享的是一款自己写的屏保程序,大学大家最头疼的就是四六级的考试了,上次考试做阅读的时候,情不自禁的发呆,想着如果我能在电脑上写一个屏保程序,那么就可以天天记单词了!

开始

首先:我们使用的是python自带的GUI模块,大部分操作网上都可以查到,对于写一些小的交互程序是完全够了。首先我们来定义一个类,这个类可以实列出一个屏幕显示对象,我把它称为Screensaver()。

from tkinter import *
import tkinter.font as tkFont # 导入了一个字体

class Screensaver():
 txt_1 = [] # 用来储存实例对象
 i = 1 # 用于后期判断是否更新单词表
 def __init__(self):
 self.win = Tk() # 基于tkiner中的Tk()方法实例个对象
 self.ft = tkFont.Font(family='Fixdsys', size=30, weight=tkFont.BOLD) # 修改字体的方法
 self.width = self.win.winfo_screenwidth() # 获取屏幕大小
 self.height= self.win.winfo_screenheight()
 
 self.win.overrideredirect(1) # 全屏设置
 self.win.attributes('-alpha',0.3) # 以参数alpha的方式设置透明度


 # 绑定事件
 self.win.bind('<Any-Button>',self.exit_screensaver) # 单击鼠标即弹出
 self.canvas=Canvas(self.win,width=self.width,height=self.height,bg='#00FFFF')
 self.canvas.pack()

 self.win.mainloop()

 def exit_screensaver(self,event): # 这里必须要个参数event
 self.win.destroy()

Screensaver() # 实例化

运行结果:

python实现屏保程序(适用于背单词)

可以看到,屏幕有透明的一层,这就是我们实例化的对象,它以cavans(画布的形式),类似于photoshop里面的画层一样,可以在上面不断叠加画层。

接下来,我们要创建文字类:Text_screen(),用它来创建文字,并使其能移动文字和创建文字。

class Text_screen():
 list_box = [i for i in range(20,1080,50)] # 22 个个数,分别代表屏幕的高度位置
 i = 0 # 用来在高度上取值
 def __init__(self,canvas,ft,width,height,text_1):
 self.canvas = canvas
 self.ft = ft
 self.text_1 = text_1
 self.x_pos = width
 self.x_move = -1
 self.create_text()

 def create_text(self): # 创建方法
 self.x1 = self.x_pos-100
 self.item = self.canvas.create_text(self.x1,self.list_box[Text_screen.i],text=self.text_1,font=self.ft,fill='red',anchor=NW)
 if Text_screen.i == len(Text_screen.list_box)-1:
  Text_screen.i = 0
 else: Text_screen.i += 1

 def move_text(self): # 移动文字
 self.canvas.move(self.item, self.x_move,0)
 self.x1 += self.x_move

最后

我们来整合着两个类:
在Screensaver()类中添加三个函数:

def birth_list(self): #生成文字,
 i = randint(0,2064)
 self.str_text = linecache.getlines('six.txt')[i:i+21] # 这里需要导入模块:linecache,并且这里的文件是单词文本,要注意它的编码格式。
 if self.i == 1:
  for my_text in self.str_text:
  txt = Text_screen(self.canvas,self.ft,self.width,self.height,my_text)
  self.list_.append(txt)
 else: pass
 def exit_screensaver(self,event): # 这里必须要个参数event
 self.win.destroy()

 def run_screensaver(self): # 循环体 ,不断更新屏幕内容
 if self.i == 1:
  for emumt in self.list_:
  emumt.move_text()
  if emumt.x1<= -30:
   emumt
   self.i = -1
   self.delect()
   self.list_ =[]
   self.birth_list()
   for my_text in self.str_text:
   txt = Text_screen(self.canvas,self.ft,self.width,self.height,my_text)
   self.list_.append(txt)
   break
 else:
  self.i *= -1
 self.canvas.after(1,self.run_screensaver) # 第一个参数是间隔事件吧?第二个是调用函数

 def delect(self):# 不断的删除屏幕对象
 for em in self.list_:
  self.canvas.delete(em.item)

这里我们就讲完所有的步骤了,大致的运行结果如图:

python实现屏保程序(适用于背单词)

需要注意的是:这里的单词是我在网上下的,如果下载好的六级单词,不是utf格式的需要使用记事本 -> 另存为 -> 选择格式。

总结

缺点:

1、这里面的代码可以简练很多的,最近没时间去看,只是粗略的完成了效果,希望大家多多指教。
2、可能对于cpu的消耗有点大,正如上所说,完全可以简化代码。
3、请大家多多指点。

大家可以在我的博客中下载源码和txt文件的压缩包
或者在github上查看代码:github

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

Python 相关文章推荐
Python面向对象编程中的类和对象学习教程
Mar 30 Python
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
Python+django实现简单的文件上传
Aug 17 Python
django rest framework 数据的查找、过滤、排序的示例
Jun 25 Python
python实现石头剪刀布程序
Jan 20 Python
python中update的基本使用方法详解
Jul 17 Python
vscode 配置 python3开发环境的方法
Sep 19 Python
将python包发布到PyPI和制作whl文件方式
Dec 25 Python
Python线程threading模块用法详解
Feb 26 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
python如何快速拼接字符串
Oct 28 Python
Python中lru_cache的使用和实现详解
Jan 25 Python
python实现各种插值法(数值分析)
Jul 30 #Python
Django 通过JS实现ajax过程详解
Jul 30 #Python
django 微信网页授权认证api的步骤详解
Jul 30 #Python
Python Pandas 如何shuffle(打乱)数据
Jul 30 #Python
python tkinter实现屏保程序
Jul 30 #Python
python pandas 时间日期的处理实现
Jul 30 #Python
Django 反向生成url实例详解
Jul 30 #Python
You might like
世界上第一台立体声收音机
2021/03/01 无线电
10条PHP编程习惯助你找工作
2008/09/29 PHP
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
php判断当前操作系统类型
2015/10/28 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
python操作文件的参数整理
2019/06/11 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
详细分析Python collections工具库
2020/07/16 Python
Python基于Faker假数据构造库
2020/11/30 Python
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
迎新晚会主持词
2014/03/24 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
党小组鉴定意见
2015/06/02 职场文书
2016新年晚会开场白
2015/12/03 职场文书
本地通过nginx配置反向代理的全过程记录
2021/03/31 Servers
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python