4168|2

9

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

python写的屏保程序 [复制链接]

  1. __author__ = 'ChenYan'

  2. from random import randint
  3. from tkinter import *

  4. class Randball():
  5.     def __init__(self, canvas, scrnwidth, scrnheight):
  6.         #初始化画布
  7.         self.canvas = canvas
  8.         #初始化球的圆心坐标
  9.         self.x_pos = randint(80, int(scrnwidth))
  10.         self.y_pos = randint(80, int(scrnheight))
  11.         #球移动的距离
  12.         self.x_move = 10
  13.         self.y_move = 10
  14.         #整个屏幕的宽和高
  15.         self.scrnwidth = scrnwidth
  16.         self.scrnheight = scrnheight
  17.         #初始化球的半径
  18.         self.radius = randint(40, 70)
  19.         #随机产生球的颜色
  20.         rc = lambda :randint(0,255)
  21.         self.color = '#%02x%02x%02x' % (rc(), rc(), rc())

  22.     def create_ball(self):
  23.         #计算得到用于创建球的四个坐标
  24.         x1 = self.x_pos - self.radius
  25.         y1 = self.x_pos - self.radius
  26.         x2 = self.x_pos + self.radius
  27.         y2 = self.x_pos + self.radius
  28.         #画球
  29.         self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)

  30.     def move_ball(self):
  31.         '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''
  32.         self.x_pos += self.x_move
  33.         self.y_pos += self.y_move

  34.         if self.x_pos >= self.scrnwidth - self.radius:
  35.             self.x_move = -self.x_move
  36.         if self.y_pos >= self.scrnheight - self.radius:
  37.             self.y_move = -self.y_move
  38.         if self.x_pos < self.radius:
  39.             self.x_move = abs(self.x_move)
  40.         if self.y_pos < self.radius:
  41.             self.y_move = abs(self.y_move)
  42.         self.canvas.move(self.item, self.x_move, self.y_move)

  43. class Screensaver():
  44.     balls = []
  45.     def __init__(self, ball_nums):
  46.         self.win = Tk()
  47.         self.width = self.win.winfo_screenwidth()
  48.         self.height = self.win.winfo_screenheight()
  49.         self.win.overrideredirect(True)
  50.         self.win.attributes('-alpha', 0.3)
  51.         #绑定事件,有任何动作退出屏保
  52.         self.win.bind('<Any-Button>', self.exit_screensaver)
  53.         self.win.bind('<Motion>', self.exit_screensaver)
  54.         self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF')
  55.         self.canvas.pack()

  56.         for i in range(0,ball_nums):
  57.             ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)
  58.             ball.create_ball()
  59.             self.balls.append(ball)
  60.         self.run_screensaver()
  61.         self.win.mainloop()

  62.     def run_screensaver(self):
  63.         for ball in self.balls:
  64.             ball.move_ball()
  65.         self.canvas.after(20, self.run_screensaver)

  66.     def exit_screensaver(self, event):
  67.         self.win.destroy()


  68. def main():
  69.     Screensaver(15)


  70. if __name__=='__main__':
  71.     main()
复制代码
此帖出自编程基础论坛

最新回复

牛人,顶一下  详情 回复 发表于 2014-9-23 18:24
点赞 关注
 

回复
举报

9

帖子

1

TA的资源

一粒金砂(初级)

沙发
 
随便贴片截图!

3.png (188.01 KB, 下载次数: 1)

3.png

4.png (175.83 KB, 下载次数: 0)

4.png
此帖出自编程基础论坛
 
 
 

回复

241

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
牛人,顶一下
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表