找回密码
 注册
关于网站域名变更的通知
查看: 437|回复: 3
打印 上一主题 下一主题

python写的屏保程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

  O; T  H1 @1 M  U# I* P__author__ = 'ChenYan'
0 E! q8 o# y/ d; z; Z  V1 N& S2 H- B$ \# |1 ^1 ?& a" a
from random import randint
. F) u0 @/ e1 W0 |, S) Y; ^from tkinter import *$ B. J4 n* u* `$ k: G& s) a- g

7 K7 g1 n' K) g4 x( Kclass Randball():5 H. w2 D2 [. X! @' L1 `
    def __init__(self, canvas, scrnwidth, scrnheight):# f" ^+ l; X) P3 b% @$ ^
        #初始化画布
% ^% N1 e) o8 H% H) Y        self.canvas = canvas
  p! z# F9 ]& b+ h; d' ?        #初始化球的圆心坐标
& Y' W+ T$ _9 _  Z        self.x_pos = randint(80, int(scrnwidth))4 M- D/ J( u% @2 @) D
        self.y_pos = randint(80, int(scrnheight))
: `0 D" U& P4 e1 D        #球移动的距离
. \; f' a5 I8 }' r) \        self.x_move = 10
4 z0 u9 I  L2 w  W        self.y_move = 10
+ @- r+ _, S+ O6 }7 P* t9 I        #整个屏幕的宽和高' d# Q1 W8 }0 c3 B
        self.scrnwidth = scrnwidth
; M$ I* @1 s9 h( F0 ?" n3 F        self.scrnheight = scrnheight. t0 i. I5 t: A$ H
        #初始化球的半径4 d( Y* ]* o  o8 Y
        self.radius = randint(40, 70)# ^" ]$ x% s* }, o! c, |; p2 T8 l! h
        #随机产生球的颜色1 G; |8 |3 m9 a
        rc = lambda :randint(0,255)
4 x+ H- Y2 Z: d5 E+ l6 O  h3 {        self.color = '#%02x%02x%02x' % (rc(), rc(), rc())
* k1 o4 D- d; @% K3 E5 z- g5 ~0 L3 L; d; o$ w
    def create_ball(self):" F% x% k9 `4 a. f% u
        #计算得到用于创建球的四个坐标
* }) A1 E3 y/ J4 c3 G        x1 = self.x_pos - self.radius" A& _! X- s- a" {; P/ P
        y1 = self.x_pos - self.radius
( P0 C/ n3 J; O' M& k7 u& ?        x2 = self.x_pos + self.radius" j. O" U: a' U: z
        y2 = self.x_pos + self.radius' m2 t' B! K! H# y$ j1 u. p
        #画球
$ k) Q0 t/ S; v! _( F$ x        self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
' @" q8 e4 L# D& H8 ?+ d9 f# C0 w, k0 U4 k
    def move_ball(self):
1 n( Y( f8 n$ D/ b2 p        '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''
0 m7 d7 X; F) O3 [  ]        self.x_pos += self.x_move
4 N, x, ~0 {8 e4 D        self.y_pos += self.y_move1 Z5 i  l+ D2 j$ z: r4 B7 _9 r2 J

; a# I7 Q% X9 X3 ~' ?6 y, X4 J        if self.x_pos >= self.scrnwidth - self.radius:& y9 K: b( l5 N2 |* t
            self.x_move = -self.x_move7 |8 [/ B* A8 |- ?7 B1 ~
        if self.y_pos >= self.scrnheight - self.radius:
' u- h; |% p' B2 p. \$ v            self.y_move = -self.y_move
: @" Q, D2 y2 F  g  V7 [0 c" {0 X        if self.x_pos < self.radius:
: D2 |9 N& d, t2 R            self.x_move = abs(self.x_move)
7 h: a* m& B2 f, C# ?5 c: z* j        if self.y_pos < self.radius:$ }0 Y; H% ^) _$ p/ e
            self.y_move = abs(self.y_move)
- [$ \! D5 s# ~! Z) M( P1 m. ]        self.canvas.move(self.item, self.x_move, self.y_move)
1 P! P3 m. j. e, i9 ^- C# v" p
2 W- A! X1 g- T  U" \7 G$ O7 T# hclass Screensaver():
0 ~1 v3 ]: ~7 }9 K* d0 l+ I2 z    balls = []
5 A4 W) z1 x8 P- T9 ~    def __init__(self, ball_nums):
( Y$ m3 `9 m/ i$ T$ u  Q        self.win = Tk()
  s9 K% ~+ S' T) \7 }- W* F0 W& K        self.width = self.win.winfo_screenwidth()+ H% O. Z# z1 e+ ^- b+ i& J* X
        self.height = self.win.winfo_screenheight()
' W" l: j; W! l& j        self.win.overrideredirect(True)
! {0 p) M, {, r; t& C        self.win.attributes('-alpha', 0.3)
# k! y1 O9 |$ P" l! i8 m        #绑定事件,有任何动作退出屏保
$ q4 X$ G) W  @. ?- f/ S        self.win.bind('<Any-Button>', self.exit_screensaver)
1 M, W! v! a# F& Y1 W        self.win.bind('<Motion>', self.exit_screensaver)
/ y8 J! k( x# x; u3 O        self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF')
# @& U7 q2 K- Z' h9 d1 c% u        self.canvas.pack()7 |3 a+ j# m8 J' w2 B+ x: ^
0 I4 B0 v% Y& f  J1 ?' k
        for i in range(0,ball_nums):
: c* g: ]$ U1 {/ E3 l+ P6 f            ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height)" n& K% ]1 K6 S5 V+ q: d7 F
            ball.create_ball()! y6 K0 K* U' z, K* Q  t
            self.balls.append(ball)
" B; V9 H0 C# q7 u. A# e  ?- m! U        self.run_screensaver()
  Z& T2 m: k! |# ?5 K$ A        self.win.mainloop()4 J; g! u/ D: b% v; V: j

) {& ]" W0 t! m/ r7 a4 v0 ?    def run_screensaver(self):
( M; D0 a3 U& A        for ball in self.balls:
) _: I, _" `1 W0 S' Y$ Z. O            ball.move_ball()0 }4 M2 k4 K1 C) P) v
        self.canvas.after(20, self.run_screensaver)
0 l/ k& @* A3 e7 S- j2 ~# s+ B2 h4 `0 ?) l: L$ ~- r
    def exit_screensaver(self, event):9 D& ^, g3 ~7 [8 d! u
        self.win.destroy()
  A/ x! |- m* E8 }7 k& b6 I' r7 Q. P2 |  k) D/ K. b% ^/ O" S& _6 k

; z, H  }$ [+ n9 X1 Mdef main():
$ e. S2 r* s& n% t2 U    Screensaver(15)- {" u1 z8 X* l. `; X
& F! K, u9 G& V3 C7 l
- x7 b3 f% g1 W9 V2 v$ r
if __name__=='__main__':3 i5 u" b- u2 _( H, V. Z+ W
    main()# F% C/ N. m) E" U7 K3 `
复制代码

该用户从未签到

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

4 h4 Q' \& y7 D; Y! F学习了  挺好的资料  谢谢分享啊

该用户从未签到

3#
发表于 2016-6-2 15:29 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O
  • TA的每日心情
    奋斗
    2020-4-3 15:16
  • 签到天数: 1 天

    [LV.1]初来乍到

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

    本版积分规则

    关闭

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

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-9-8 12:44 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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