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服务器与android客户端socket通信实例
Nov 12 Python
全面解析Python的While循环语句的使用方法
Oct 13 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
如何通过python实现人脸识别验证
Jan 17 Python
详解django中Template语言
Feb 22 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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
第十四节 命名空间 [14]
2006/10/09 PHP
强烈推荐:php.ini中文版(1)
2006/10/09 PHP
两个开源的Php输出Excel文件类
2010/02/08 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
Python绘制3D图形
2018/05/03 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
Python实现分数序列求和
2020/02/25 Python
Python计算信息熵实例
2020/06/18 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
广州品高软件.net笔面试题目
2012/04/18 面试题
介绍一下常见的木马种类
2014/11/15 面试题
外贸业务员工作职责
2014/01/06 职场文书
探亲邀请信范文
2014/01/30 职场文书
婚礼主持词
2014/03/13 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python