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 相关文章推荐
Windows系统下安装Python的SSH模块教程
Feb 05 Python
python中根据字符串调用函数的实现方法
Jun 12 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
PyQt5每天必学之单行文本框
Apr 19 Python
查看Django和flask版本的方法
May 14 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
python requests.post带head和body的实例
Jan 02 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
python如何从文件读取数据及解析
Sep 19 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 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
php addslashes 函数详细分析说明
2009/06/23 PHP
php empty函数 使用说明
2009/08/10 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
js右键菜单效果代码
2007/07/21 Javascript
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
python实现人脸识别代码
2017/11/08 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
探矿工程师自荐信
2014/01/24 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
简单介绍Python的第三方库yaml
2021/06/18 Python
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技
css之clearfix的用法深入理解(必看篇)
2023/05/21 HTML / CSS