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

python写的屏保程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

, n) Y" ]8 X& {7 B__author__ = 'ChenYan'
  X( R$ _  h- D+ r' f0 y5 ]! c7 C+ X; T6 ^$ K
from random import randint
0 M6 H, S& J/ E  M$ ?) Y$ [* e0 b( sfrom tkinter import *4 Y% `5 Y7 r6 D, K
, e0 N! I% j2 G
class Randball():
9 n9 o% O! N9 x% `    def __init__(self, canvas, scrnwidth, scrnheight):. g7 j  y0 B8 ~
        #初始化画布
* g' w1 t; G$ j7 E/ x1 e        self.canvas = canvas
8 C! L2 Z* t) I, r) w        #初始化球的圆心坐标% k+ J- y9 y/ u' M/ M  c6 S
        self.x_pos = randint(80, int(scrnwidth))
; F, w) \4 |# K. \# Z        self.y_pos = randint(80, int(scrnheight))" V3 g* }9 {* T0 ~
        #球移动的距离
, x; S" E7 E5 D        self.x_move = 10
" s9 ^5 S, v) [* y0 p) z2 A        self.y_move = 10- y, E: D# u! _( ^
        #整个屏幕的宽和高
/ N) ^- ?; U) A3 }$ y: I        self.scrnwidth = scrnwidth
3 }* h/ b. `4 [) [/ b, u% e        self.scrnheight = scrnheight
2 r' p' p1 S) y1 G3 ~        #初始化球的半径
. E" w% {7 Z  _% h; S) i' x) a        self.radius = randint(40, 70)
* Y# C& x8 g. z* o2 O! Q5 {        #随机产生球的颜色
7 q3 e0 s3 @% _( q, G6 v        rc = lambda :randint(0,255)
  `1 G( x$ y6 @7 |/ J. H        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())8 q( d" \3 [) e

. y- E! k& E2 R" O4 e8 G    def create_ball(self):: }8 g1 {; E$ E9 k% v7 ]4 E
        #计算得到用于创建球的四个坐标- m: \' N* S, v% t0 |8 Q; ~3 S
        x1 = self.x_pos - self.radius
  y+ K/ m8 u. N& ?8 G/ D  t        y1 = self.x_pos - self.radius" _# @( U  v' }; r# d2 m% S% p
        x2 = self.x_pos + self.radius
( \% A$ j: h0 ^2 i7 g- n4 S" S        y2 = self.x_pos + self.radius. Z# ]1 u( i- ~1 e- d8 u$ |
        #画球
. j5 h0 r, [! `8 |: H        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
$ f5 s' O: t2 q" ^  e1 i5 I
4 [/ X9 _; A+ W$ X" Y2 _7 _    def move_ball(self):
4 O& l/ Q- S6 [- Q) z4 d4 e        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''
% t5 h+ A  h' x5 A* l; ^* s& X5 K        self.x_pos += self.x_move% X. F/ v' `; k* Z
        self.y_pos += self.y_move: Y# L& N0 T/ g# J. I1 T8 S

' b2 D7 Z+ c5 {! Q6 R, c        if self.x_pos >= self.scrnwidth - self.radius:/ z' W4 H6 l' ^' Z
            self.x_move = -self.x_move
) C# `  z4 V% g7 D  z% U* r        if self.y_pos >= self.scrnheight - self.radius:3 w# p8 {) j/ n+ G& }8 W& {, g4 N' J
            self.y_move = -self.y_move6 ]" P! E2 U/ H; s& {& S
        if self.x_pos < self.radius:
5 f3 o8 l, I6 `6 `- ~& n+ N            self.x_move = abs(self.x_move)
) W% z( c- F7 f9 v! a* D        if self.y_pos < self.radius:
! I0 L( c1 }% L% M# N. z: T            self.y_move = abs(self.y_move)
' P& ?9 _: c9 l" S0 ~, m        self.canvas.move(self.item, self.x_move, self.y_move)
3 Y, w1 |$ W8 a5 w/ A; q: Z" `4 ?8 H+ ]9 s0 S
class Screensaver():' d/ r3 P4 L( N' }
    balls = []( w6 Q+ s' h. T( y
    def __init__(self, ball_nums):2 e, p( Z( \4 p' n' L
        self.win = Tk()
0 s( ?% f0 [6 }8 {. X8 J( W        self.width = self.win.winfo_screenwidth()
( @2 K& o  t% V/ f/ m# E; L- S        self.height = self.win.winfo_screenheight()# u4 d3 ]# [9 |  X" [) d
        self.win.overrideredirect(True)/ I" H1 z+ f- P5 T7 }8 j; O0 K
        self.win.attributes('-alpha', 0.3)
# m1 t, h9 X- [% h4 v! P8 S3 z        #绑定事件,有任何动作退出屏保
( i6 ^& _0 \2 R1 m; i        self.win.bind('<Any-Button>', self.exit_screensaver)
! r& ]3 p) r; S* N& n        self.win.bind('<Motion>', self.exit_screensaver)
% t! E- M2 n8 J: Y        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF'). j' _" V: g# f; ?# d& m
        self.canvas.pack()
5 u" j, V9 y. G- g7 Q+ K3 R( B& B% R6 I9 |0 C
        for i in range(0,ball_nums):
, i# P5 h: k* n  i& A( A- c            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height): ^/ [' l. s% X! C# @
            ball.create_ball()
& U8 K! J# C% D+ P8 \" y            self.balls.append(ball)
' a" v+ h. T) L! I  @        self.run_screensaver()
+ p1 j5 F+ W' I! S        self.win.mainloop()3 N( S& A, l2 ~$ w  I5 \$ w

, D2 r. ?7 v2 ^8 v( h# f; b$ ~4 C3 r    def run_screensaver(self):
) E: S6 g. W! W9 K0 [: [) m        for ball in self.balls:. @! O. q. o+ ~) x- }+ b& k% v
            ball.move_ball()* {$ l! x% N5 o5 _; B5 S
        self.canvas.after(20, self.run_screensaver). c: _2 H, \" Y  O

) Z- Y7 O, t5 O: R    def exit_screensaver(self, event):( ]# ]& r3 c9 F; y, v' |' K
        self.win.destroy()
( O- a# j' W9 _7 T' y+ c
( L" {7 I! Q% }4 {* Y4 H7 [+ h6 ?5 \  N; h
def main():
. Q' A$ [% `# |  D% b! E    Screensaver(15). K' V/ D0 j( }$ P$ Y  h

* D% F. x7 k# X4 D7 g8 p8 G- g+ ~. n! }" W6 c# o, T. \8 ^
if __name__=='__main__':% _# n1 k% d9 V% a; h, y7 {# g
    main()
" m" j" T' _2 e) S  H- C复制代码

该用户从未签到

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

7 \( O$ T5 i/ `' l+ g学习了  挺好的资料  谢谢分享啊

该用户从未签到

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 19:58 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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