找回密码
 注册
关于网站域名变更的通知
查看: 458|回复: 3
打印 上一主题 下一主题

python写的屏保程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-5-30 17:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

+ T# u* p/ S  o+ F/ Z  X__author__ = 'ChenYan'
+ s' E8 v4 m1 V0 a- h8 y  ]9 _- p8 n% }$ K
from random import randint
/ m  i2 A, N7 ]5 Q$ gfrom tkinter import *1 \% b3 O( b6 ]4 ~/ W

6 ^* y5 X+ E: I$ ?+ u+ z- r9 I: `class Randball():
3 N1 {4 R  g. I/ {    def __init__(self, canvas, scrnwidth, scrnheight):
8 y. b- }9 g8 E1 e6 u        #初始化画布
  i  L0 k0 Z1 W, Q9 L/ @        self.canvas = canvas
& r4 S2 C; K# _& d6 Z" e+ Y6 B        #初始化球的圆心坐标( `/ g  b9 T, ^( W' a5 d
        self.x_pos = randint(80, int(scrnwidth))! h! {1 x) g; F3 A! y
        self.y_pos = randint(80, int(scrnheight))
- q9 _! o! O, r1 i& W* m        #球移动的距离
; u) Z5 y$ Q" T* `, o        self.x_move = 10  G  {  T/ D/ f, f% n7 k* p; k# x8 K
        self.y_move = 10
8 D) R6 s% M3 M( ~+ p# r9 C        #整个屏幕的宽和高
" A8 y& @- g, a        self.scrnwidth = scrnwidth# R$ |! H) J" k* Y/ w
        self.scrnheight = scrnheight2 C1 b4 @0 k- t5 ?' A
        #初始化球的半径
/ p* z: X8 x/ N) w. _6 ~/ Q: ?        self.radius = randint(40, 70)
4 |- P& i0 u  p& T# d$ V        #随机产生球的颜色; f" C1 T$ j; X- u& L
        rc = lambda :randint(0,255): ?8 E+ c( V% B8 m' A  z3 A
        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())$ _( _( `5 S% c  K6 F6 e* `

( q7 C1 C- M/ U9 H# [0 K    def create_ball(self):
6 O0 |: V/ ]+ {* {        #计算得到用于创建球的四个坐标8 e8 L; G9 @8 F- A# |
        x1 = self.x_pos - self.radius
: g- {) i3 |3 M1 ^% l! m8 }        y1 = self.x_pos - self.radius# z! e2 J; ~* C
        x2 = self.x_pos + self.radius0 z7 o& E2 H* D: v: h
        y2 = self.x_pos + self.radius
  K& a" g" w2 B        #画球+ G% ~# K. y2 O4 C5 S
        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
' F1 x7 P. ?* t" V9 P  }2 {7 p
/ K8 r6 K7 ]) S; i    def move_ball(self):, T" ?2 d& C$ e* ]8 M
        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''
! \* A, H8 @* L7 K' m        self.x_pos += self.x_move
+ i# P* I/ [3 @7 X; k        self.y_pos += self.y_move
$ e7 M: X7 h2 z# s" K9 `% O' [. P+ E% X* V: q' S
        if self.x_pos >= self.scrnwidth - self.radius:8 W, V5 I8 A' c7 j
            self.x_move = -self.x_move
* E! q  {" L# m# a        if self.y_pos >= self.scrnheight - self.radius:
- m- V5 d" M5 f0 K/ a, z            self.y_move = -self.y_move
- \' y4 z! b' ~" c1 D: y# D% ]        if self.x_pos < self.radius:. O2 Z* o: W3 u3 m" z8 d+ B1 N* B
            self.x_move = abs(self.x_move)
% r9 A5 z7 d, B        if self.y_pos < self.radius:2 I$ X4 v+ r8 Z. L
            self.y_move = abs(self.y_move)) q" _" x8 M; `
        self.canvas.move(self.item, self.x_move, self.y_move)
6 x# X, g8 d0 ^$ S3 Y) X7 T9 N
' \! ]0 D8 r0 z% f2 o# jclass Screensaver():* n) B, O0 x8 W" v' J( \
    balls = []* l" e1 z/ B9 n  z: M
    def __init__(self, ball_nums):
- l, S- }* [: L9 l; W) M2 B$ _+ a7 N        self.win = Tk()1 d7 @7 E" n$ G
        self.width = self.win.winfo_screenwidth()
  g+ L- f, R, C: B. w        self.height = self.win.winfo_screenheight()$ ~! N2 _& O+ r/ E( O# d7 Y' T/ |
        self.win.overrideredirect(True)% L2 M" V0 O% I. r$ G# l1 r
        self.win.attributes('-alpha', 0.3)
$ E5 p. n1 @  M2 m& l0 @: A5 h        #绑定事件,有任何动作退出屏保
; m4 a, K! }  ^        self.win.bind('<Any-Button>', self.exit_screensaver)
  F4 t; x8 _4 s3 F. y, f# J8 B        self.win.bind('<Motion>', self.exit_screensaver)& M. D3 N9 Z! i6 t0 _4 m7 L/ E+ a5 F
        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF')
" r+ n5 Q- y% n        self.canvas.pack()
1 P/ U! Y9 L9 _9 T; p0 n9 c. Y7 ~$ ?' l& P6 J
        for i in range(0,ball_nums):
! x/ `# S& w2 z4 D  w# U0 m            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)
2 B" N, g5 ?  R9 ^            ball.create_ball()
# z/ d9 {0 t2 p3 v            self.balls.append(ball): {$ J5 K6 T8 `5 ]* i
        self.run_screensaver()! E+ ~+ e5 v8 H. T& D0 i, p2 `
        self.win.mainloop()
# O8 w3 ~; Y/ g3 H, j2 G% b- q8 Z( Y# s0 C6 ^" C6 U2 Y. @
    def run_screensaver(self):
2 J& s7 E, i' J        for ball in self.balls:
! w3 b: X- d& T9 }; `2 ~            ball.move_ball()' P3 w/ o9 |: W: w
        self.canvas.after(20, self.run_screensaver)
2 b0 a: h4 L6 n' v
# M2 p! \3 N0 d8 T4 i    def exit_screensaver(self, event):
7 C. p/ c5 a; ]$ g% N$ n        self.win.destroy()5 f) y( f( d3 Q# c/ r
  P0 t  `; k6 q

2 |+ R/ S0 d$ N3 u$ y9 kdef main():
- L0 t! G/ X9 o) j$ T4 `    Screensaver(15)4 I2 \- v# h- j3 ]- Q
1 L$ I" I& h. _2 D, S
, T! C0 _2 {, S) W1 c; ^2 E; x2 x
if __name__=='__main__':
. c% c2 m/ |/ z/ F) l5 ~) o    main()
4 [$ G/ p3 s% ~% A复制代码

该用户从未签到

2#
发表于 2016-6-1 16:29 | 只看该作者

8 b0 z1 b/ G$ r, F, d学习了  挺好的资料  谢谢分享啊

该用户从未签到

3#
发表于 2016-6-2 15:29 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O
  • TA的每日心情
    奋斗
    2020-4-3 15:16
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2016-9-21 15:58 | 只看该作者
    牛逼,刚接触
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-23 22:15 , Processed in 0.156250 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表