找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

python写的屏保程序

[复制链接]

165

主题

600

帖子

1289

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x

7 S. {5 R1 r# |5 }/ q9 C) C. b__author__ = 'ChenYan'
6 X7 y! G. T& {, y# J4 K2 v" |- m4 m: Z  O7 |  J. r' L
from random import randint
9 t6 j7 n* y4 @: }from tkinter import *$ K3 C& M$ [& G* W( O

8 ~. m. @) P) D/ X6 _* A1 Nclass Randball():
' C( _  V- g. v" c3 E    def __init__(self, canvas, scrnwidth, scrnheight):
1 T# l  ^* q3 O# d, a        #初始化画布
: }3 |" R% R* t+ P. z% M        self.canvas = canvas
, ^6 I: T/ `' M7 F        #初始化球的圆心坐标5 [* e& M6 F% B4 G% `
        self.x_pos = randint(80, int(scrnwidth))8 e+ \3 g) {- w6 J( K
        self.y_pos = randint(80, int(scrnheight))  u  {9 s. L; I  u+ d- H
        #球移动的距离. i4 H( \+ q. Z
        self.x_move = 10
( ?2 \" E' ?. L" u6 b  {5 J% P        self.y_move = 10
: U* t7 ]/ o' v$ f, I2 @        #整个屏幕的宽和高
0 Q7 B- e& x' i* ^  j- T        self.scrnwidth = scrnwidth0 [3 A" n! ^: x* y% t3 K% R7 K6 B! Z
        self.scrnheight = scrnheight
7 [" ]! K' Q* N2 y  v* B& k6 J3 i        #初始化球的半径" u+ f" z, W$ E. _( ]
        self.radius = randint(40, 70)( p2 h9 d$ R: T& Z' H
        #随机产生球的颜色
9 I* _, R" F! w- w( [0 H1 W        rc = lambda :randint(0,255)1 {0 Y4 @1 w. e  E
        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())
% M7 f( B# g. i5 _% ]4 u, `, u7 p" |. G7 o' w$ m9 V: Y3 m
    def create_ball(self):. ?; Z( r4 P+ f) }+ p% r
        #计算得到用于创建球的四个坐标3 d$ S7 k/ ~# V+ q/ n' S2 e0 b
        x1 = self.x_pos - self.radius" G; `* }, _+ Y* K& ?
        y1 = self.x_pos - self.radius
! U$ x4 R! E+ M7 z$ J        x2 = self.x_pos + self.radius
1 v5 J: x7 ]* u, i) Y. x        y2 = self.x_pos + self.radius
7 e5 f, k: M6 e# h        #画球) X/ B* @3 }, F3 i. p$ M" _% Y
        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)6 a* W* F7 e' Q$ p+ l3 ]7 i

8 b; R3 m; r5 q2 b8 [    def move_ball(self):  o( ~$ x$ }" Q5 V
        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''6 k8 X9 ^: d! [& F' t
        self.x_pos += self.x_move) n* T& R8 y' c) u
        self.y_pos += self.y_move
% u. X8 D" S, f  R/ S
2 {* v: D& K6 H1 S' D8 |- q+ F) C0 a        if self.x_pos >= self.scrnwidth - self.radius:
' W6 p- S+ f2 V5 p' j! S! y            self.x_move = -self.x_move
5 Z1 @' \! e% u/ S        if self.y_pos >= self.scrnheight - self.radius:
. h/ Q6 I" [, P3 u# L+ {            self.y_move = -self.y_move7 V* A3 h8 R8 B: i- k7 J# S: I* D
        if self.x_pos < self.radius:
# q' q# H7 q7 J4 E5 W2 ~            self.x_move = abs(self.x_move)
3 `& I/ _: N/ _$ S        if self.y_pos < self.radius:! ^$ `* W$ e' p1 B, C
            self.y_move = abs(self.y_move)& }, _8 {8 V' G3 r' Q
        self.canvas.move(self.item, self.x_move, self.y_move)
/ i# Y: }8 l; H$ _) H) ?& D' B0 A: ^' ~" k
class Screensaver():
3 o( w6 o5 R: U1 e" N3 o3 g% Y    balls = []6 I( }7 F/ N! r3 A5 y
    def __init__(self, ball_nums):
! t6 |8 Q% ^/ y7 |        self.win = Tk()
- C$ A* G; K1 }) P7 f        self.width = self.win.winfo_screenwidth()# b" a4 s# N* Q& B* d9 a
        self.height = self.win.winfo_screenheight()
: f% p2 S& ^- E+ p. m        self.win.overrideredirect(True)
# r( |7 R7 ?0 ]- j! ~! u        self.win.attributes('-alpha', 0.3)
9 L, r5 c+ R( _8 a1 P        #绑定事件,有任何动作退出屏保6 i! X# a8 K0 f- i
        self.win.bind('<Any-Button>', self.exit_screensaver)& {: f/ L5 S) a5 ~0 j$ Y( R
        self.win.bind('<Motion>', self.exit_screensaver)
3 `( P- A6 T, ~7 B3 `        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF')
" F7 }- ^6 k6 L; m" Y( \. z        self.canvas.pack()
7 Y# s6 @/ b9 O/ ?# _; |
) p0 U, a2 }+ |1 z( q* g/ _3 F        for i in range(0,ball_nums):
+ O9 J, b  e: u3 y, \            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)4 s( r& E2 u1 d1 W% j
            ball.create_ball()- [5 s- S+ M- C/ G: M8 d
            self.balls.append(ball)
$ J- Q% E1 x* `' D        self.run_screensaver()% o, |' I2 g0 g
        self.win.mainloop()2 {! v  ^5 [+ Q8 Z9 ^2 ?

: f: F; t4 Y4 C$ A. `    def run_screensaver(self):
" C! }& @* h8 L4 Y( M        for ball in self.balls:
1 f. E; E( h4 z            ball.move_ball()" N/ }2 s+ F+ X2 m
        self.canvas.after(20, self.run_screensaver); Z1 V: P. C3 V; g

' _- J2 j  O# W, L    def exit_screensaver(self, event):' ^- C* j7 r. q  t& v% q  w
        self.win.destroy()/ }* _9 p3 W- I7 C2 ~/ e3 h
3 h5 I+ U& b2 |3 L( L
; |2 U# C% T; T# x' i; {8 o
def main():& B" ~2 \0 [$ e2 }
    Screensaver(15). t& ^6 W' e& e& I
+ A, C! r6 |8 ]' W. o

4 V  b0 u0 i7 A7 K6 qif __name__=='__main__':& M& }; C0 \  M5 U  f
    main()+ Q# c% }7 q+ I+ P1 l  x  r
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

245

主题

1028

帖子

1921

积分

四级会员(40)

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

积分
1921
2#
发表于 2016-6-1 16:29 | 只看该作者
. I0 ?2 b4 p! G& M' w+ _: J0 [
学习了  挺好的资料  谢谢分享啊

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 11:24 , Processed in 0.059272 second(s), 31 queries , Gzip On.

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

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

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