找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

python写的屏保程序

[复制链接]

165

主题

600

帖子

1289

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
( ?5 Y9 u. S' M/ R- O4 k& w
__author__ = 'ChenYan'' n: F2 p& m: Q2 f

0 R3 Z2 x- Y% o4 f* ufrom random import randint
6 G- j# F5 n/ c3 N$ T/ F- hfrom tkinter import *: ^8 J- v$ p6 k" _4 u
% U. `  \5 M1 ~' ]1 p1 ?
class Randball():
- R5 w/ [* m) |    def __init__(self, canvas, scrnwidth, scrnheight):
( ~  P2 Y7 \8 I2 J) q7 m& z+ v3 q        #初始化画布
; B  H% p4 |; x; |3 }, ^  X5 ?( }. I        self.canvas = canvas
7 |- Z5 \2 X3 M% q& B% N        #初始化球的圆心坐标: d: C9 D1 [2 }+ I! X" V
        self.x_pos = randint(80, int(scrnwidth))& v) X4 i( \& o( t
        self.y_pos = randint(80, int(scrnheight))/ A7 `' U0 `% W! H* p# s6 ?0 b
        #球移动的距离! p  b# F5 H9 Q/ X% q
        self.x_move = 10
: y4 C3 u6 M, @9 O        self.y_move = 10# d) z; k3 `, Y
        #整个屏幕的宽和高
& g# B4 u+ J& V( \1 f; e; C/ y        self.scrnwidth = scrnwidth
/ O# U/ {, L$ L+ Q5 l; x        self.scrnheight = scrnheight5 b. v$ B- C% ~1 g' i; c8 U
        #初始化球的半径
$ S5 m* ]+ F* L9 B. s2 [1 s9 C        self.radius = randint(40, 70), ~; _" E, U3 h& F- c# q
        #随机产生球的颜色6 ~$ b& p+ @* C- o( V) b  C  m/ c9 a
        rc = lambda :randint(0,255)
3 e! O& C5 K' H: Z5 M' v) w        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())
" ?' q& X1 x+ T2 Q# n# l+ }) Z. P7 N& t8 Y  V
    def create_ball(self):
6 E) W5 f/ m2 L$ y) d4 q# f        #计算得到用于创建球的四个坐标
- `+ G9 H0 T/ K( }# ^/ O        x1 = self.x_pos - self.radius
# ^+ n. D* ?# f3 [4 b5 a3 h! Z        y1 = self.x_pos - self.radius7 r/ @- s, s( X
        x2 = self.x_pos + self.radius6 w* B! a8 o+ v4 L5 k
        y2 = self.x_pos + self.radius
; M- f8 f7 B* L$ t6 ?) o        #画球
# w" ]5 B4 h: o& K+ M3 N        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
9 u) k& s. e. i9 ^9 @% k$ t
6 O9 x5 l4 p1 L/ U, C, w& U    def move_ball(self):
) b9 l* p$ |* m& O& |        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''
, R" g- u0 Z- s9 I) b0 \        self.x_pos += self.x_move
2 d* J/ Z% I# B- T* Q8 ^        self.y_pos += self.y_move) a% b1 \7 O$ G3 n, I

4 ?4 {( s! M7 R* X# Q" Y8 b, a4 G        if self.x_pos >= self.scrnwidth - self.radius:" K# R  x0 m  ^+ Q; p6 K, K
            self.x_move = -self.x_move% `2 Q+ N3 f- _- ?+ z: O
        if self.y_pos >= self.scrnheight - self.radius:  a# s% F4 y# s1 X' J% h! S9 b5 w
            self.y_move = -self.y_move: W2 f1 S6 \. e& p- C! H( M
        if self.x_pos < self.radius:5 n# J; Y& t% O$ ^6 C# _6 i
            self.x_move = abs(self.x_move)5 k& p4 ]+ D% m) W
        if self.y_pos < self.radius:
9 [7 t4 u! ~( v! X+ \; ?            self.y_move = abs(self.y_move)
  ]4 k! p% ~, u5 e" Y        self.canvas.move(self.item, self.x_move, self.y_move)
, G8 S' u' K5 ?4 b- S2 S! Z3 u( B" ]; }& o9 f
class Screensaver():
6 D$ J8 b5 B" j/ B0 x    balls = []+ l7 x3 l8 O  q
    def __init__(self, ball_nums):% {% N% O( p& H, ]8 h
        self.win = Tk()
* b5 P9 w) Z3 e7 ^7 ~! U        self.width = self.win.winfo_screenwidth(), ?( {* |# j. _+ d* `/ J
        self.height = self.win.winfo_screenheight()
! T4 K: C. U- k2 e% H6 k        self.win.overrideredirect(True)6 P: f# ?! o9 w4 @2 l
        self.win.attributes('-alpha', 0.3)
* h* E+ s/ Q% d9 o* y5 d% R        #绑定事件,有任何动作退出屏保
6 x$ \( h, d# X/ C: C; p        self.win.bind('<Any-Button>', self.exit_screensaver)
' Q, G+ D1 n; P        self.win.bind('<Motion>', self.exit_screensaver)+ ?+ A- S% S6 H: W# \6 R& {" F% ^% s
        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF')% `, h0 }2 O, Q3 i0 P
        self.canvas.pack()
0 n5 p! p- A: P1 t! f3 Z4 B$ P0 H: N2 Q. `+ Z1 x  N; C$ |+ L
        for i in range(0,ball_nums):9 M9 ?) Z, f( P/ B
            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)
4 D. W/ ~, y; t! H. I            ball.create_ball()
# C" [( j+ ^; G% t2 L7 `: u1 w            self.balls.append(ball)
( O& u3 M, [4 P3 O9 c$ I1 ^        self.run_screensaver()- ^" y' X% o( Y; T5 e
        self.win.mainloop()8 M- V( Q' [/ e7 V

7 ]  I4 z. W2 B* r    def run_screensaver(self):
+ L& M+ |* k$ R1 X1 W# v        for ball in self.balls:
! G" `  P" B4 G8 x            ball.move_ball()3 `' ^' W( v& }( m' ]  ]8 W
        self.canvas.after(20, self.run_screensaver)
% {8 g5 a4 }/ E! j  z* R( ^# P7 r8 a1 M! o1 ?) \! [
    def exit_screensaver(self, event):
% b, m/ y" }4 i- n3 p3 }1 u9 S        self.win.destroy()! d5 \* r9 ^7 [
! |3 v4 ^$ _2 I1 y; ?2 [5 b
- ~. U1 O* q* W4 A8 {
def main():
) [5 `" Z( e+ D9 u  p    Screensaver(15)
. }& F' P3 {, p+ t! z
$ ~7 _' F  w* X6 _8 ~. ]  j; \' l9 O( U. m* a+ F
if __name__=='__main__':) j, k4 z2 L+ }# J/ y
    main()
. d; E, E& A+ t1 J( g5 a( e复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

245

主题

1028

帖子

1921

积分

四级会员(40)

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

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

5 q6 u+ x* B2 W  A. Y6 }学习了  挺好的资料  谢谢分享啊

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 09:49 , Processed in 0.058358 second(s), 31 queries , Gzip On.

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

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

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