最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python利用tkinter實(shí)現(xiàn)屏保

 更新時(shí)間:2019年07月30日 08:36:37   作者:抗原-MHC復(fù)合體  
這篇文章主要為大家詳細(xì)介紹了python利用tkinter實(shí)現(xiàn)屏保,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python利用tkinter實(shí)現(xiàn)屏保的具體代碼,供大家參考,具體內(nèi)容如下

import random
import tkinter

class RandomBall():
 '''
 運(yùn)動(dòng)的球
 '''
 def __init__(self, canvas, scrn_width,scrn_heigh):
  '''
  球的構(gòu)造函數(shù)
  :param canvas: 傳入畫布,在畫布上進(jìn)行球的構(gòu)造
  :param scrn_width: 傳入屏幕寬度
  :param scrn_heigh: 傳入屏幕高度
  '''
  #x,y表示出現(xiàn)的球的圓心
  self.ball_x = random.randint(20, int(scrn_width - 20)) #球出現(xiàn)的隨機(jī)x坐標(biāo)
  self.ball_y = random.randint(10, int(scrn_heigh - 10)) #球出現(xiàn)的隨機(jī)y坐標(biāo)
  #模擬運(yùn)動(dòng):就是不斷地重畫球,不斷地更新球的位置
  self.x_move = random.randint(4, 30) #模擬x方向運(yùn)動(dòng)
  self.y_move = random.randint(5, 20) #模擬y方向運(yùn)動(dòng)
  #定義寬度和高度和畫布
  self.canvas = canvas
  self.scrn_width = scrn_width
  self.scrn_heigh = scrn_heigh
  #球的大小隨機(jī)
  self.rad = random.randint(20, 150) #用半徑rad表示球的大小
  #定義顏色
  c = lambda : random.randint(0, 255)
  self.color = "#%02x%02x%02x"%(c(), c(), c())

 def creat_ball(self):
  '''
  用構(gòu)造函數(shù)中的值創(chuàng)建一個(gè)球
  :return:
  '''
  #tkinter沒有畫圓函數(shù),只有橢圓函數(shù)
  #但在正方形里面畫的橢圓就是正圓
  #已知圓心坐標(biāo)和半徑,則圓心坐標(biāo)減半徑能求出正方形左上角
  #圓心坐標(biāo)加上半徑,能求出右下角
  #已知左上角和右上角,可以畫出
  x1 = self.ball_x - self.rad #左上角的x坐標(biāo)
  y1 = self.ball_y - self.rad #左上角的y坐標(biāo)
  x2 = self.ball_x + self.rad #右下角的x坐標(biāo)
  y2 = self.ball_y + self.rad #右下角的y坐標(biāo)
  #在有對(duì)角坐標(biāo)的情況下就可以創(chuàng)建圓
  self.item = self.canvas.create_oval(x1, y1, x2, y2, fill = self.color, outline = self.color)

  # 球動(dòng)
 def move_ball(self):
  self.ball_x += self.x_move #球移動(dòng)后的新x坐標(biāo)
  self.ball_y += self.y_move #球移動(dòng)后的新y坐標(biāo)
  # 碰壁回彈判斷
  if self.ball_x + self.rad >= self.scrn_width: #撞到了右邊的墻
   self.x_move = -self.x_move
  if self.ball_x - self.rad <= 0: #撞到了左邊的墻
   self.x_move = -self.x_move
  if self.ball_y + self.rad >= self.scrn_heigh: #撞到下面的墻
   self.y_move = -self.y_move
  if self.ball_y - self.rad <= 0: #撞到上面的墻
   self.y_move = -self.y_move
  self.canvas.move(self.item, self.x_move, self.y_move) #利用x,y的移動(dòng)距離控制球的移動(dòng)快慢

class ScreenSaver():
 '''
 可以被啟動(dòng)的屏保
 '''
 #創(chuàng)建一個(gè)list裝創(chuàng)建的球

 def __init__(self):
  self.balls = list()
  self.nums_balls = random.randint(6, 20) #產(chǎn)生隨機(jī)數(shù)量的球
  self.baseFrame = tkinter.Tk() #啟動(dòng)界面
  self.baseFrame.overrideredirect(1) #取消邊框
  #移動(dòng)鼠標(biāo)則退出屏保
  self.baseFrame.bind("<Motion>", self.my_quit)
  self.baseFrame.attributes('-alpha', 1)
  #鍵盤任意鍵退出屏保
  self.baseFrame.bind("<Key>",self.my_quit)
  #得到屏幕的寬和高
  w = self.baseFrame.winfo_screenwidth()
  h = self.baseFrame.winfo_screenheight()
  #創(chuàng)建畫布
  self.canvas = tkinter.Canvas(self.baseFrame, width = w, height = h)
  self.canvas.pack()

  #在畫布上畫球
  for i in range(self.nums_balls):
   ball = RandomBall(self.canvas, scrn_width = w, scrn_heigh = h)
   ball.creat_ball()
   self.balls.append(ball)

  self.run_screen_saver()
  self.baseFrame.mainloop()
 #球動(dòng)函數(shù)
 def run_screen_saver(self):
  for ball in self.balls:
   ball.move_ball()
  #在sleep100ms以后啟動(dòng)第二個(gè)參數(shù)函數(shù),相當(dāng)于100ms動(dòng)一次
  self.canvas.after(100, self.run_screen_saver)
 #當(dāng)事件發(fā)生時(shí),傳入event,退出屏保
 def my_quit(self, event):
  #析構(gòu)(退出)屏保
  self.baseFrame.destroy()
if __name__ == "__main__":
 #啟動(dòng)屏保
 ScreenSaver()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python cv2截取不規(guī)則區(qū)域圖片實(shí)例

    python cv2截取不規(guī)則區(qū)域圖片實(shí)例

    今天小編就為大家分享一篇python cv2截取不規(guī)則區(qū)域圖片實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • jenkins配置python腳本定時(shí)任務(wù)過程圖解

    jenkins配置python腳本定時(shí)任務(wù)過程圖解

    這篇文章主要介紹了jekins配置python腳本定時(shí)任務(wù)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • python射線法判斷一個(gè)點(diǎn)在圖形區(qū)域內(nèi)外

    python射線法判斷一個(gè)點(diǎn)在圖形區(qū)域內(nèi)外

    這篇文章主要為大家詳細(xì)介紹了python射線法判斷一個(gè)點(diǎn)在圖形區(qū)域內(nèi)外,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python圖片驗(yàn)證碼降噪和8鄰域降噪

    Python圖片驗(yàn)證碼降噪和8鄰域降噪

    這篇文章主要介紹了Python圖片驗(yàn)證碼降噪和8鄰域降噪的相關(guān)內(nèi)容,需要的小伙伴可以參考下面文章
    2021-08-08
  • 基于python實(shí)現(xiàn)智能用例生成工具

    基于python實(shí)現(xiàn)智能用例生成工具

    這篇文章主要為大家詳細(xì)介紹了如何基于python實(shí)現(xiàn)智能用例生成工具,即根據(jù)輸入的功能點(diǎn),生成通用測(cè)試點(diǎn),感興趣的小伙伴可以跟隨小編一起了解下
    2023-09-09
  • 詳解如何在PyQt5中實(shí)現(xiàn)平滑滾動(dòng)的QScrollArea

    詳解如何在PyQt5中實(shí)現(xiàn)平滑滾動(dòng)的QScrollArea

    Qt 自帶的 QScrollArea 滾動(dòng)時(shí)只能在兩個(gè)像素節(jié)點(diǎn)之間跳變,看起來很突兀。所以本文將通過定時(shí)器,重寫 wheelEvent() 來實(shí)現(xiàn)平滑滾動(dòng),需要的可以參考一下
    2023-01-01
  • Python混合使用同步和異步函數(shù)的方法

    Python混合使用同步和異步函數(shù)的方法

    Python是一種非常靈活的編程語(yǔ)言,可以混合使用同步和異步函數(shù)來實(shí)現(xiàn)更高效的編程。本文將介紹如何在Python中混合使用同步和異步函數(shù),以及如何在不同場(chǎng)景下選擇合適的函數(shù),感興趣的可以了解一下
    2023-03-03
  • python將字典列表導(dǎo)出為Excel文件的方法

    python將字典列表導(dǎo)出為Excel文件的方法

    這篇文章主要介紹了python將字典列表導(dǎo)出為Excel文件的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 連接Python程序與MySQL的教程

    連接Python程序與MySQL的教程

    這篇文章主要介紹了連接Python程序與MySQL的教程,MySQL作為最具人氣的數(shù)據(jù)庫(kù),與程序之間的連接也成為了如今Python學(xué)習(xí)中近乎必備的知識(shí),需要的朋友可以參考下
    2015-04-04
  • Python中循環(huán)依賴問題及其解決方案

    Python中循環(huán)依賴問題及其解決方案

    在軟件開發(fā)中,循環(huán)依賴是一個(gè)常見的問題,尤其是在使用 Python 這樣的動(dòng)態(tài)語(yǔ)言時(shí),循環(huán)依賴指的是兩個(gè)或多個(gè)模塊或組件相互依賴,形成一個(gè)閉環(huán),本文將探討 Python 中循環(huán)依賴的問題,并提供一些解決方案,需要的朋友可以參考下
    2024-06-06

最新評(píng)論

荔波县| 佛冈县| 介休市| 梧州市| 新巴尔虎左旗| 乌兰县| 鄂伦春自治旗| 揭西县| 江永县| 阜城县| 马边| 尼玛县| 苍梧县| 定兴县| 孝昌县| 阿克陶县| 雅江县| 隆德县| 莱阳市| 融水| 文水县| 石城县| 昭觉县| 武安市| 兴安县| 桐柏县| 海南省| 卢氏县| 淄博市| 遂川县| 天全县| 鹤山市| 西贡区| 辽中县| 金塔县| 枝江市| 榆林市| 中山市| 山阴县| 达孜县| 上饶市|