找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

python写的屏保程序

[复制链接]

165

主题

600

帖子

1289

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
7 K( s  H% H1 \( `
__author__ = 'ChenYan'! R1 l- x  C8 Z2 H

, n" N  q" z: m! Ofrom random import randint
; p9 ^9 }! [6 ]% t8 N% Jfrom tkinter import *
+ L/ \; M% O  n4 S( v* L" q" N% o9 c( s9 g* E4 p% N
class Randball():7 j$ ^. E5 \3 L- s1 H0 s
    def __init__(self, canvas, scrnwidth, scrnheight):
' |. b( g6 R+ p" ]        #初始化画布' r; L! l# }5 @2 N2 A8 H  ?/ u
        self.canvas = canvas
/ Y1 j" T* Z3 T        #初始化球的圆心坐标
, O$ C0 {( }! u& W        self.x_pos = randint(80, int(scrnwidth))
+ Y! X' O: X& e6 D: T( p        self.y_pos = randint(80, int(scrnheight))
% x8 p2 A+ G+ d8 S        #球移动的距离
3 ?; _4 _* \; v8 v* C5 n        self.x_move = 10! f  d& q6 p; q0 t
        self.y_move = 109 z: L5 K+ D9 [7 @9 u+ c
        #整个屏幕的宽和高: F: x6 [2 ?4 z. V6 K4 S+ S9 |; F
        self.scrnwidth = scrnwidth5 r7 o( U& b$ \
        self.scrnheight = scrnheight
3 d; k9 d+ a! j% i" O* U        #初始化球的半径
  R" h; x  P: F6 c/ N+ B        self.radius = randint(40, 70)7 a- b9 @' i, j0 g) E
        #随机产生球的颜色
4 m6 I: j$ }8 O4 e6 c        rc = lambda :randint(0,255)6 a) Z$ P9 E6 K6 d+ N: h
        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())! d+ F& V+ N5 _2 ?

' H4 l; ~, b' T% @/ U3 l    def create_ball(self):
6 M3 W# C: ~9 v        #计算得到用于创建球的四个坐标
5 u' {6 N- |6 K3 x( i. f        x1 = self.x_pos - self.radius
3 N8 ^; ~7 g; z' w$ l8 R/ ?/ i        y1 = self.x_pos - self.radius! G5 j9 \  J# e
        x2 = self.x_pos + self.radius4 L: O. p0 }% d$ D2 J6 W5 J) ^
        y2 = self.x_pos + self.radius3 @" K6 t1 r8 n6 M& [- Q& D! B; y
        #画球9 P! d8 w/ v$ w& ?. ]: u  y; r& I
        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
" y6 n$ |+ k! d# l6 o
, {# A3 y5 h, L* l6 F; X# ?    def move_ball(self):
9 E/ c# ~. p5 \+ o! K        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''
# p/ j( W( y0 ~( p: n        self.x_pos += self.x_move
1 S% z& R0 I; z; x$ O; I2 F5 A& q        self.y_pos += self.y_move
1 K8 S7 Y; k0 e7 o- I
0 K) b& s# F% r  Q        if self.x_pos >= self.scrnwidth - self.radius:
4 n- Q6 e' L' b: p3 K( j: _            self.x_move = -self.x_move: E3 C$ f5 [# G0 t
        if self.y_pos >= self.scrnheight - self.radius:. l9 ^2 h4 b- h
            self.y_move = -self.y_move+ c; U6 z0 h6 f) r( g
        if self.x_pos < self.radius:
# A4 c  ~" D0 \/ b7 m) D            self.x_move = abs(self.x_move)
2 p" c3 e! a* j; w/ ^4 \0 Q        if self.y_pos < self.radius:
4 g$ i( n0 q' ^: f# v2 b1 e3 m            self.y_move = abs(self.y_move)
& c- F, x4 ~& L: s% L- e7 s        self.canvas.move(self.item, self.x_move, self.y_move)
" F) U1 Y6 U6 c( W7 Z+ g1 L  p# Z* k) l9 J: X5 b( g# I
class Screensaver():( ^9 c8 C/ y$ s  w, f9 |  @  A
    balls = []( e7 B2 X( {2 N- F2 r
    def __init__(self, ball_nums):7 V9 U% A5 f0 b) H2 o
        self.win = Tk()
3 h* S0 ?5 U8 k  a        self.width = self.win.winfo_screenwidth()  }* r& [  K3 ?. y+ ]9 N4 H
        self.height = self.win.winfo_screenheight()% R6 w* J1 M0 a4 k4 D9 G9 L+ `. l
        self.win.overrideredirect(True)
0 T7 a) Q4 _1 q6 ]# R        self.win.attributes('-alpha', 0.3)  @$ j0 w- e" h* V/ h4 p
        #绑定事件,有任何动作退出屏保4 H6 R4 T' l* ~! p: Q/ }
        self.win.bind('<Any-Button>', self.exit_screensaver)
! |' K' f& ~/ M; K0 ]& U9 y        self.win.bind('<Motion>', self.exit_screensaver)
2 D( e  e7 A$ I  s6 G- a        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF')% i2 N5 G0 E( I# G2 Z. ^
        self.canvas.pack(). o% J; ?) j+ k  p) k& _. H5 ^
3 j' Y. u0 J8 ], M" J* _
        for i in range(0,ball_nums):4 V4 G$ u4 }1 c: W4 r
            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)
; x1 N4 _  L2 N- n6 y4 g# w" W            ball.create_ball()5 _: S/ L; Q$ r+ A$ |
            self.balls.append(ball)
/ v0 ?3 A" D- I        self.run_screensaver()
/ y8 q% A( b0 ?        self.win.mainloop()
8 V0 y' X4 O1 D. m2 ?' R, w& ?! n; Q. G2 Z/ v' S& v& R
    def run_screensaver(self):2 ]) ^) n) n) M: V  V, m
        for ball in self.balls:! R4 i9 r$ k/ h$ {, }5 E2 A' L
            ball.move_ball()% t0 q" l( t) v6 Q* O9 ]6 A
        self.canvas.after(20, self.run_screensaver)' `1 i# p6 l1 ]0 M1 B4 P0 }6 v
6 S% t# e/ c/ S$ O6 X
    def exit_screensaver(self, event):
6 v4 J$ C3 \# y7 z  f, B2 m1 x        self.win.destroy()4 ^5 M1 w3 F# i  r$ S; r2 j( @
2 R; ~, T- g6 N8 o. o0 [
9 E1 E6 H% G$ O, s5 A7 j5 e
def main():
% z+ V9 Q/ j: r& |+ H0 _    Screensaver(15)4 L6 I6 r1 v, c% X) X4 J

/ q/ \- s3 v, g% z, l8 `& Y
* Q: b  p8 m: z8 K' D0 T( Q9 jif __name__=='__main__':
, i& V9 v! U; i    main()
" T+ a! F, s! V! Q' A复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

245

主题

1028

帖子

1921

积分

四级会员(40)

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

积分
1921
2#
发表于 2016-6-1 16:29 | 只看该作者
$ W* Z6 \* a/ l7 n- _) L2 @
学习了  挺好的资料  谢谢分享啊

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, 2024-11-15 12:35 , Processed in 0.059615 second(s), 32 queries , Gzip On.

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

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

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