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

python写的屏保程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

( M9 A/ X9 U6 I6 c/ j__author__ = 'ChenYan'
" e! O  \# O2 f, I
: ~: S5 h: [1 ]- }( ~3 Dfrom random import randint9 U8 d# {. [/ Z
from tkinter import ** f3 g2 }/ G8 \# ]0 [
' R6 B( r1 K/ |9 D' W
class Randball():
( ?6 e4 n  N# s+ e4 C/ L    def __init__(self, canvas, scrnwidth, scrnheight):, a: N, N3 t0 X- v6 c) q; l) w
        #初始化画布
; @7 @" w5 A# z! {: j' t        self.canvas = canvas
2 I$ P  j8 }5 Y' }$ j+ _        #初始化球的圆心坐标
$ i3 _: n) I: k9 E6 M- h: R        self.x_pos = randint(80, int(scrnwidth))
9 l8 H( ~. H# Y# k" U, C        self.y_pos = randint(80, int(scrnheight))0 d7 O' @# S- c+ s8 r
        #球移动的距离
# ?8 ]3 Q* g6 L6 i        self.x_move = 102 \+ @) O+ v2 N7 ^- U' F! Z
        self.y_move = 107 H8 n, t) s$ |3 N4 @' f6 g
        #整个屏幕的宽和高6 C7 K- ~* e5 w. u5 j2 `
        self.scrnwidth = scrnwidth8 Y  @- ~5 m2 g* {( Q7 I$ S( p
        self.scrnheight = scrnheight
. t8 y" p. l+ J& {: ~" S/ M, c        #初始化球的半径
5 }2 T5 j; P! ~1 v8 _        self.radius = randint(40, 70)7 u' x& Y5 T; ^4 Q% ~
        #随机产生球的颜色1 }9 z! W6 i$ D/ k' |
        rc = lambda :randint(0,255)
9 e2 E+ ]  h9 l3 c8 k% ~4 R& o8 e$ S' @        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())
% r& `9 M! `! _' G$ q) h8 @7 b. Q( z2 i" v* t" a
    def create_ball(self):2 a- a, X8 Q( [( W) C2 i* T0 T
        #计算得到用于创建球的四个坐标5 o4 M0 G& Z2 s0 Q8 G% E
        x1 = self.x_pos - self.radius  f3 y  A2 o# {
        y1 = self.x_pos - self.radius) `5 p, E/ U6 v# [/ H
        x2 = self.x_pos + self.radius
/ f+ V0 _' t- w: Q& x" S  u" g, r        y2 = self.x_pos + self.radius
: j( j; d2 x2 Q' D( @        #画球/ R( N; R1 z2 |% u; d
        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
7 Q! i' ?) l# c- V; `! X
" [# R1 ~* M/ J2 z, {( ~; R" I    def move_ball(self):& u2 S" v, a2 ^  b* Q3 L8 ~
        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''
3 ?/ b; K4 C* Y: M        self.x_pos += self.x_move
* h2 A& C4 ]! Y1 K  {        self.y_pos += self.y_move. D3 r+ @& I& V
; [$ K. {  a! A; L6 G. [* D& V
        if self.x_pos >= self.scrnwidth - self.radius:
' {! p6 N# G4 T+ s7 f$ ~            self.x_move = -self.x_move* ~$ O: U+ P9 F% ^5 v, B
        if self.y_pos >= self.scrnheight - self.radius:
; h" t5 s* g6 r# D% \/ _9 u9 O            self.y_move = -self.y_move
$ |1 h; L& Y! R- K* P+ f        if self.x_pos < self.radius:
4 a( z( h( u% v4 D! o# A            self.x_move = abs(self.x_move)
$ ~1 P  r* D  o' \% L        if self.y_pos < self.radius:4 D# G3 d( E% @' H3 C) `& I5 l
            self.y_move = abs(self.y_move)5 S6 L5 D6 Q# s8 X/ u
        self.canvas.move(self.item, self.x_move, self.y_move)  G. h  z$ [  e- x; Q) d

) |, V5 R* {6 b5 K2 b7 sclass Screensaver():
  ]" D0 A, B2 F' |+ ^* g    balls = []# j; p* B- T) n2 g8 L. U8 [
    def __init__(self, ball_nums):# c! P2 O1 w( M, f: P, p; `% U0 Q
        self.win = Tk(): N1 q- H" k. p/ W0 d  l3 c
        self.width = self.win.winfo_screenwidth()
& B! H2 ]; }! h' ~# i( r; S0 Q        self.height = self.win.winfo_screenheight()( [. X0 Y" n+ X. y
        self.win.overrideredirect(True)9 A8 T6 H% M% ^$ N# E
        self.win.attributes('-alpha', 0.3)
; U9 b8 @- W9 [0 c$ I8 b        #绑定事件,有任何动作退出屏保
. {3 T# w! F9 Z6 E* {% p& B" E" b        self.win.bind('<Any-Button>', self.exit_screensaver)$ e5 y% b! Q$ B- E& V* _5 d
        self.win.bind('<Motion>', self.exit_screensaver)
4 d% p3 }: @" W) L6 s! B        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF'); m& W4 d, I) R7 u  ^1 R# K% L
        self.canvas.pack()
+ Z7 ?" d8 c+ j
+ s( d  f% c  }& M( N        for i in range(0,ball_nums):
$ L. r( x( P! t6 W- H- c. h, \            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)& i, Q& O/ F8 ~- G5 [  e
            ball.create_ball()
, s# H9 `8 R; _0 D- {- r, V            self.balls.append(ball)
' Z$ p* V& p' L  O  d0 C' Z        self.run_screensaver()
5 h8 m6 v- j" ?; k4 e        self.win.mainloop()# J8 q( @% J; |  T# K, @4 V
9 X# q. E8 w% S" j" \
    def run_screensaver(self):
. z0 @" d, U( t9 k' Z" X* t, p        for ball in self.balls:& x) W' X: Y! x7 I. \
            ball.move_ball()5 K# e! {$ _. |: G$ {
        self.canvas.after(20, self.run_screensaver)
0 T" Q# R+ ^. z( R+ Y" z4 t1 ~6 n0 t
" F' b2 X- S7 S' K5 @! ^    def exit_screensaver(self, event):
2 C) L3 {, n' p7 v/ K        self.win.destroy()6 Y7 o& m5 |( ^( i8 u% ~
5 e% P* s& r- f$ {2 u% {$ B4 j
8 q) c0 _5 D$ W$ l3 X2 e# C
def main():
1 ?7 J" v0 }/ ], }    Screensaver(15)6 r9 a- e$ O8 i/ v# d% o. T

/ J- o9 n5 G: s2 C" G; p9 M8 t
if __name__=='__main__':
7 o- l" t3 y: h6 T; ~    main()
2 b. M9 O7 D' z3 \复制代码

该用户从未签到

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

* F' F% ]( n6 q5 W" V+ 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-8-2 23:48 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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