找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

电巢直播8月计划
查看: 88|回复: 3
打印 上一主题 下一主题

python写的屏保程序

[复制链接]

165

主题

600

帖子

1289

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

EDA365欢迎您!

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

x

) E1 h" F9 b8 P; R2 ], U8 H__author__ = 'ChenYan'
( G& e; B5 M8 f9 D: \6 K: _8 j9 u* p# v* ?, I+ o
from random import randint
5 A& _) t1 D+ T0 R# q' Tfrom tkinter import *
6 s3 n! Q4 A4 \5 g
" E, Y0 R, n# ?' N2 aclass Randball():
" t" X' m: Z+ W. }  I5 Q) U4 y    def __init__(self, canvas, scrnwidth, scrnheight):
5 Q: V  c) t, X: Z* V4 O        #初始化画布5 C$ _% n" ~  b
        self.canvas = canvas6 N" ]; |. z4 e
        #初始化球的圆心坐标
  x& i6 N& Y% b/ ]  M3 o        self.x_pos = randint(80, int(scrnwidth))# M' V9 V+ O# R0 Z0 W, {. b
        self.y_pos = randint(80, int(scrnheight))
, n$ z, B" v4 w3 L7 t$ o% u        #球移动的距离
( w9 W6 F- Z, T7 x5 ]7 J* M7 h% {, P6 Z        self.x_move = 10% X5 F6 m' e; r' S0 P" [" [
        self.y_move = 10
. ~0 b7 O6 _, |1 R3 x" N. R        #整个屏幕的宽和高3 V- X# L6 k* q+ x) H
        self.scrnwidth = scrnwidth
& D/ P% @5 p  z( E( E: W4 m9 g        self.scrnheight = scrnheight
( F- I0 e2 A& C5 y        #初始化球的半径$ ?$ z7 |) k- g" Z0 z7 _
        self.radius = randint(40, 70)$ Y; F4 Z/ Q6 H- [
        #随机产生球的颜色
# n* K0 |1 ?; v& n        rc = lambda :randint(0,255)- ?6 j. `; j+ e6 \! u& `4 H
        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())6 c7 p# l$ A) Y* ?, p

% E1 ~) ^; @% s    def create_ball(self):- g( o6 x- ?* k& o; r4 Z2 \+ s
        #计算得到用于创建球的四个坐标2 {/ |# d1 {# Z
        x1 = self.x_pos - self.radius
5 k, t5 x  m' x9 j        y1 = self.x_pos - self.radius8 d/ j0 a, Z3 h0 i- X5 L+ }
        x2 = self.x_pos + self.radius
0 B! s! t' M# ~, [+ m; e        y2 = self.x_pos + self.radius* L+ `! r4 H5 H8 ^+ }
        #画球1 _2 X! H4 W0 z: F
        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)  F& W& f# u" u& p8 ~
& U* @- t" p: Y
    def move_ball(self):) @- G: C" x# l6 Y% P$ Q
        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''
' K4 G1 e; A  N1 [6 V- r( N        self.x_pos += self.x_move1 X  g& a/ O) N, d
        self.y_pos += self.y_move
- p) b( \9 e3 L6 J* t, w9 G5 R: e! z* J/ v1 U2 r
        if self.x_pos >= self.scrnwidth - self.radius:4 o( x! F8 m, c8 ]0 i0 k* i
            self.x_move = -self.x_move* A4 S) N# h4 `6 p( q  @
        if self.y_pos >= self.scrnheight - self.radius:
4 N! H$ q9 z& p* w/ K  {            self.y_move = -self.y_move
, z$ k7 F) j; V8 l        if self.x_pos < self.radius:$ D6 ]2 F. |) D  c9 X0 Z/ q: {
            self.x_move = abs(self.x_move)
$ A# m: \  e1 L0 n        if self.y_pos < self.radius:
0 a6 m" R  _8 d" G            self.y_move = abs(self.y_move)
, u. t' Q4 v5 _) |& K        self.canvas.move(self.item, self.x_move, self.y_move)/ T) f# ]' m2 T( d+ q- U

5 F9 o1 v- j: Fclass Screensaver():
  k; C: s2 d' a$ M4 s$ L8 z    balls = []2 O& }8 E- W0 g* s; d
    def __init__(self, ball_nums):. F8 M7 Q7 A. m% F* j' ^
        self.win = Tk()& C8 o; ~# o. g$ s* x2 }
        self.width = self.win.winfo_screenwidth()
+ G* S+ S* y3 X" \" Y& @# t4 q- J        self.height = self.win.winfo_screenheight()  H: q$ X+ m  \
        self.win.overrideredirect(True)
3 n' O8 Z. n' ]  w# y        self.win.attributes('-alpha', 0.3)
7 V$ P; D3 [- b( A$ N- d7 ?" l        #绑定事件,有任何动作退出屏保
2 v* X! r8 u, d1 m9 `9 D        self.win.bind('<Any-Button>', self.exit_screensaver)
* e) w1 L% p( A* L: ]3 V        self.win.bind('<Motion>', self.exit_screensaver)5 R" v/ Q% r% w8 ^* U$ v( k! [
        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF')
1 m3 S! c+ F3 O# i6 S3 b# u        self.canvas.pack()
% A, i: B* [+ x7 @. K+ Q: f# {$ @& t9 }
        for i in range(0,ball_nums):+ G+ [, w3 s6 f
            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)
( e3 _- k" o- n# @0 ]& R% f            ball.create_ball()" v2 O, \% P  l# R' r
            self.balls.append(ball)
! b3 S( W. T8 g        self.run_screensaver()
. N* r" O+ Z) m        self.win.mainloop()
- W( g8 _" {: D% D% p$ ^# A! s
& M+ b' Y) [$ B  W: J    def run_screensaver(self):. ]6 m+ i' l- V' o7 S8 N# I
        for ball in self.balls:, g) ~+ a+ c( w. I1 N( ^4 M8 I. x
            ball.move_ball(), a4 {7 |" _  n0 Q
        self.canvas.after(20, self.run_screensaver)
) ~5 W/ E1 l7 s0 U( P* H  Q* H/ u8 X* q" N9 e6 g6 ]
    def exit_screensaver(self, event):
% C9 D  M# \4 q( d/ ~% |/ |        self.win.destroy()' F- Z5 I, U5 a4 z! @( p

8 G+ Y- v- _  {2 M+ F3 u/ ]9 h+ p- ]6 e8 E6 ^6 m9 H8 p( f
def main():
$ L  E! [# c9 X    Screensaver(15)& v( _- v+ r: c/ R' v3 N

& j% o* o1 t8 _0 g; z( S
) _+ H2 N0 q: n* Yif __name__=='__main__':1 T, C5 g8 V( T' u" B( l
    main()$ Z5 z) p  `1 ]
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

245

主题

1028

帖子

1921

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1921
2#
发表于 2016-6-1 16:29 | 只看该作者
0 A. c* p) V- A7 ]- `$ m; F
学习了  挺好的资料  谢谢分享啊

159

主题

527

帖子

1197

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1197
3#
发表于 2016-6-2 15:29 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O

1

主题

172

帖子

1027

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

本版积分规则

关闭

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

巢课

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-7-15 03:37 , Processed in 0.056667 second(s), 30 queries , Gzip On.

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

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

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