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

python写的屏保程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
3 [- B, y7 A- {
__author__ = 'ChenYan'1 _' t6 D: `4 L) t4 r. K% q9 R% p

; Q" \. j$ ]0 R, l1 H, S- q: qfrom random import randint
6 S6 D5 ^0 O8 e+ |. D" }& }+ z2 x4 Gfrom tkinter import *" r! u* Z. \; T8 @4 t& ]7 d+ j
9 W& v' _% R. t3 d$ Q: G) H# P" b
class Randball():
6 {2 @0 ^$ y$ G2 Q    def __init__(self, canvas, scrnwidth, scrnheight):
9 D6 e; }5 A7 Y/ `) c7 A        #初始化画布
$ h: Q" K; r( r        self.canvas = canvas
# r4 y4 c) d' Y        #初始化球的圆心坐标
' Y# ^% s& x  V        self.x_pos = randint(80, int(scrnwidth))7 x6 `4 R/ A5 u5 L* n& t2 ]& Z
        self.y_pos = randint(80, int(scrnheight))  o- G5 {& U8 X7 q
        #球移动的距离
1 l) u+ Z3 i  M& t# w        self.x_move = 107 f* `2 S0 C* ?! ~4 l) O& }
        self.y_move = 10
" z9 v4 v$ y& Q0 e- n& R$ ~        #整个屏幕的宽和高
0 f& |4 t, S# S7 K  f        self.scrnwidth = scrnwidth
$ O2 J' S, A0 L* K$ R        self.scrnheight = scrnheight
( ?& T3 I4 L5 A& I( W2 ~        #初始化球的半径  c' r9 f# M5 M# f! f) }5 q1 ]7 A0 K
        self.radius = randint(40, 70)
# M1 p+ X% d0 t5 S2 G7 b$ W        #随机产生球的颜色
* U5 X* ~! e7 d* R' j6 G5 G        rc = lambda :randint(0,255)) _2 k' q7 R* ?9 K) \
        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())
4 ]  h6 I* G6 @- F
) J$ T7 S3 N1 G" s. n5 g    def create_ball(self):2 n5 M- j- @' t( q- X9 ?
        #计算得到用于创建球的四个坐标) a, Z' A5 R/ K" v
        x1 = self.x_pos - self.radius8 W1 C. ]( j4 j% `# Z* U
        y1 = self.x_pos - self.radius+ i. e6 j( Z) Z0 q
        x2 = self.x_pos + self.radius
1 S; K' F- J7 ^$ R        y2 = self.x_pos + self.radius& e: N, v( t1 L- T* S; X/ u9 D
        #画球
+ `; \% ]0 t0 C3 U        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
- M0 S( b5 h! p9 J' v' P0 f
, s7 Z4 X0 y+ I# O1 ^    def move_ball(self):
7 e- R8 ?, r# n. v7 C6 D7 |        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动''', S7 N  A4 o$ H/ e( c& Y
        self.x_pos += self.x_move
& z2 L8 W  {- W+ j2 a        self.y_pos += self.y_move8 s/ F2 u9 W$ X- q- I; n( [; W
4 _7 R% B% k/ Z4 ^' T; m9 e
        if self.x_pos >= self.scrnwidth - self.radius:
  b5 s, D6 c- y. l2 s            self.x_move = -self.x_move
% V; y1 \3 ?- y5 _3 n2 d        if self.y_pos >= self.scrnheight - self.radius:
% m, T- |! T, i" P1 G* `, D            self.y_move = -self.y_move
# z5 f1 N! O( ^, E        if self.x_pos < self.radius:$ `' e0 `. g- a) i" m
            self.x_move = abs(self.x_move)- v& `& [: c, t* c- a- ?
        if self.y_pos < self.radius:) u% P2 x' P" b0 P% w" J* T$ [' K
            self.y_move = abs(self.y_move)) @4 l1 `- E8 y; D/ ^9 s
        self.canvas.move(self.item, self.x_move, self.y_move)
8 k! w8 ]5 _5 f
3 j# C$ N' c0 y+ I) Zclass Screensaver():
- u6 ?3 D4 ]- P! h2 @    balls = []
0 c5 B$ k: b' z  ^# V    def __init__(self, ball_nums):5 N: c; p6 T/ W4 f, c! j
        self.win = Tk()5 t9 q' h* y$ v. S7 x4 }
        self.width = self.win.winfo_screenwidth()
3 m1 U9 H% S# S        self.height = self.win.winfo_screenheight()& Y0 ^3 l2 a6 `+ q) i
        self.win.overrideredirect(True)/ r+ H- g4 K5 x% j* p2 }" z4 p. W
        self.win.attributes('-alpha', 0.3)1 |( d$ }% U7 k6 p2 a
        #绑定事件,有任何动作退出屏保8 C- x, C9 G" P0 Q. r' x. `
        self.win.bind('<Any-Button>', self.exit_screensaver)4 L$ Y- b* m9 e& X
        self.win.bind('<Motion>', self.exit_screensaver)& I; C) {& m% f
        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF')1 s, e8 N. F3 j9 p" L5 u# \
        self.canvas.pack()
9 S8 Z' \" t9 Q2 r# m
' ~- W% s( i0 i& T) ]+ y  N, @        for i in range(0,ball_nums):. ]" x& g0 O* |- T% i  f
            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)
- T) j5 e% q- F' B& \9 K: P            ball.create_ball()/ N! M, E0 e/ M. |) B" h
            self.balls.append(ball)
: k. d% z/ k6 Z7 u9 V# E: p% k5 r        self.run_screensaver()
1 b  D; s' |+ w2 _        self.win.mainloop()
. j: z( N5 U. K1 F4 g! q
  m: ^3 {  }: I( T& X  C* v- {- Y    def run_screensaver(self):2 \& H( ~/ ^( N1 j
        for ball in self.balls:
6 K+ H5 n" I  S) S( ~            ball.move_ball()
$ r1 ^+ k, C' j, O        self.canvas.after(20, self.run_screensaver)1 t+ |0 ]' U0 D8 W8 }
# a: k! L9 p' K
    def exit_screensaver(self, event):
: `# ~$ J/ [! s+ f* V4 ?        self.win.destroy()+ u& o; T, e% F% }* `
) t2 Z0 ]$ V7 Y5 W

& t' g9 Y. b) Idef main():- q- Z$ w/ B9 O  w6 b$ W
    Screensaver(15)( n! ^0 x- }! k: q
7 ]5 ^9 ~5 L5 R: T3 S8 w. [1 z/ l8 C# O
+ F6 y  @3 J/ |, K+ e
if __name__=='__main__':
/ [- f( }0 {' a3 Z    main()
2 b9 N6 a7 O* w( `2 j1 g7 |复制代码

该用户从未签到

2#
发表于 2016-6-1 16:29 | 只看该作者
4 W  m. _8 I4 ^- s; V/ R/ I
学习了  挺好的资料  谢谢分享啊

该用户从未签到

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-10-12 10:18 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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