找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

python写的屏保程序

[复制链接]

165

主题

600

帖子

1289

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x

2 z' P, i- w( f2 c) ^  ~3 w__author__ = 'ChenYan'/ W/ G& T4 G% a
, d7 m( ]+ S5 s0 Q; g5 N, z
from random import randint% }) V9 S+ R9 l7 W4 i
from tkinter import *
! |# R2 q5 f3 O
/ J7 k# f! J9 e: [; Tclass Randball():% }9 f- Z/ `& z- A; k
    def __init__(self, canvas, scrnwidth, scrnheight):7 ^! j5 _" w' k  \6 o: i( B1 Q: R+ D% W
        #初始化画布
$ J9 V4 e9 U: w* t% d; J* f        self.canvas = canvas3 v. O& D$ v$ q; w& A! f& u
        #初始化球的圆心坐标
8 ]+ ^4 T1 d7 A        self.x_pos = randint(80, int(scrnwidth))
4 g% C, A- g/ E' ~7 M" [3 _        self.y_pos = randint(80, int(scrnheight))) S/ i1 Z' `# e) F; m
        #球移动的距离
7 {$ v- k: p$ h+ U1 R% C+ t        self.x_move = 10" l' K! U, N! G5 b; G
        self.y_move = 10) h0 p7 O6 G, v/ `3 o3 K
        #整个屏幕的宽和高
: I/ y8 E8 n# w% L6 L/ g/ |; X3 X' U        self.scrnwidth = scrnwidth
9 M5 _' p: @0 @0 m6 l7 o        self.scrnheight = scrnheight
3 b2 `8 O! }0 t; l7 C, u        #初始化球的半径. p" q- V! ]& R- S, o
        self.radius = randint(40, 70)2 f5 v" t0 X' c/ N
        #随机产生球的颜色
% X/ K# h; d" k6 c. I( t        rc = lambda :randint(0,255)
2 d) a) c& R  A- }        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())5 P/ t# I. p& s% f7 F3 [$ N
' y7 O' `! D0 [) r% O6 v7 R# x
    def create_ball(self):
4 N7 x3 ]- {4 H/ H1 f0 V5 X/ ?& _9 T        #计算得到用于创建球的四个坐标
6 D( u" B# m3 y8 B! d        x1 = self.x_pos - self.radius& r- F6 B0 x+ f
        y1 = self.x_pos - self.radius0 f, ?' g# `! z
        x2 = self.x_pos + self.radius
8 O) F' I* G2 E- |        y2 = self.x_pos + self.radius7 K2 T- h$ v) Y) ?3 Z0 E& l# g6 E
        #画球/ |. \" O7 y1 w4 m% r0 O- q4 e) @
        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
/ K6 L# b, r. H% |3 L; E, @
) Y/ g2 M8 o) x    def move_ball(self):
+ n& V9 q; s% y, O) s        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''0 I9 U6 b+ p$ C6 J& j
        self.x_pos += self.x_move5 C, k9 V* O% O) |: _
        self.y_pos += self.y_move
5 ]; e' a. H- k" W8 p/ J. v8 v7 R, B6 _7 V
        if self.x_pos >= self.scrnwidth - self.radius:
. k! X5 r8 T* r            self.x_move = -self.x_move
+ _8 w4 F) ~/ W% ^        if self.y_pos >= self.scrnheight - self.radius:5 l  L' [) W" Y/ m  U+ i
            self.y_move = -self.y_move" S5 d7 E; W# y. V' B, z
        if self.x_pos < self.radius:% }& z+ Q  \6 z' p# J9 ~* B
            self.x_move = abs(self.x_move)9 M: T# q8 i- i9 A0 l
        if self.y_pos < self.radius:8 g. O9 Z3 M! C$ o  z' T
            self.y_move = abs(self.y_move)  X" l6 P( e7 [5 r: f) G
        self.canvas.move(self.item, self.x_move, self.y_move)3 E) _/ ~+ F* }/ _2 O; N5 e3 ^

! k0 Y, O1 y7 I# u2 W: Pclass Screensaver():3 w3 p' V) b0 d1 u( p
    balls = []
" X5 j+ ~' a, }- j$ z    def __init__(self, ball_nums):$ L$ p' J$ o$ s6 f. w/ ^( M. x
        self.win = Tk()" O+ K- S7 d8 s; y3 I3 M
        self.width = self.win.winfo_screenwidth()
  P6 `' L2 D0 T# G* W- \+ \4 {7 @0 [        self.height = self.win.winfo_screenheight()
$ X  G* P+ V  d5 @1 V/ H0 a0 K        self.win.overrideredirect(True)
$ r  C% e4 C% d6 e        self.win.attributes('-alpha', 0.3)! ?' u. f+ c% ^. ?3 D
        #绑定事件,有任何动作退出屏保
4 m# N" @4 W0 H& a7 G        self.win.bind('<Any-Button>', self.exit_screensaver)/ B+ E) \1 f5 |
        self.win.bind('<Motion>', self.exit_screensaver); ~" c6 G/ _9 }& \
        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF')
) @" Z) y; k+ a1 _/ q( O* B, k        self.canvas.pack()
3 t& s3 S4 }2 }; W, G+ V
& w' x" w# F7 F( ]* k        for i in range(0,ball_nums):
1 z5 w. t9 M7 [9 ^0 o2 j            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)
. t0 n+ r( s* ^0 A1 ^/ \            ball.create_ball()' K  A& T" m2 O- C  c
            self.balls.append(ball)6 \# a: b0 e; \0 a( U" k
        self.run_screensaver()4 d9 }- }7 \( L  F& ^3 |& A1 S' S
        self.win.mainloop()
9 ^- w; `- a4 S- b5 J, Q  n; U- ?, E* h1 z
    def run_screensaver(self):
  p* B. _/ T# O9 f+ z9 y8 g        for ball in self.balls:
. V! C( Q8 ?6 {! f/ H            ball.move_ball()
' v- n- P! V! z* e, j3 S# t9 p        self.canvas.after(20, self.run_screensaver)
% B4 {" S4 Y2 A8 f4 w! h  }5 S3 u/ ~' ~
    def exit_screensaver(self, event):
% g" X; }6 q0 k; L5 F, B+ G5 j+ `        self.win.destroy()
7 o$ X, l$ R1 |) d$ i/ \
; n' i% p, `1 u( s8 v5 o2 g4 y& y( u
6 }1 G3 u" y! ~6 m2 a6 O- N: h, d5 F5 i4 Hdef main():
- S# n6 q4 y$ A+ N    Screensaver(15)
& ~, g9 f5 l0 z2 o: k% d$ L- Q. E6 W1 Z4 h/ g% H# ?

' T2 v) m' a9 \. b3 dif __name__=='__main__':! b# q! @$ _; p4 T
    main()
- l: Q2 {5 K0 h9 c2 s% @$ W9 x复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

1

主题

172

帖子

1027

积分

四级会员(40)

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

积分
1027
4#
发表于 2016-9-21 15:58 | 只看该作者
牛逼,刚接触

159

主题

527

帖子

1197

积分

四级会员(40)

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

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

245

主题

1028

帖子

1921

积分

四级会员(40)

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

积分
1921
2#
发表于 2016-6-1 16:29 | 只看该作者
# G  J' m2 B, f( c* |  z6 [- J
学习了  挺好的资料  谢谢分享啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-15 14:02 , Processed in 0.057930 second(s), 32 queries , Gzip On.

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

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

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