1. 程式人生 > >用python編寫一個屏保程式(背單詞)

用python編寫一個屏保程式(背單詞)

大家好,我是一名即將畢業的大學生,第一次在CSDN上發表文章,之前在其他的部落格上也寫過,但是總的來說,這個平臺的資源要多一些(個人覺得),所以有很多不懂的地方希望大家多多指教。

今天我要給大家分享的是一款自己寫的屏保程式,大學嘛大家最頭疼的就是四六級的考試了,上次考試做閱讀的時候,情不自禁的發呆,想著如果我能在電腦上寫一個屏保程式,那麼就可以天天記單詞了!

開始
首先:我們使用的是python自帶的GUI模組,大部分操作網上都可以查到,對於寫一些小的互動程式是完全夠了。首先我們來定義一個類,這個類可以實列出一個螢幕顯示物件,我把它稱為Screensaver()。

from
tkinter import * import tkinter.font as tkFont # 匯入了一個字型 class Screensaver(): txt_1 = [] # 用來儲存例項物件 i = 1 # 用於後期判斷是否更新單詞表 def __init__(self): self.win = Tk() # 基於tkiner中的Tk()方法例項個物件 self.ft = tkFont.Font(family='Fixdsys', size=30, weight=tkFont.BOLD) # 修改字型的方法 self.
width = self.win.winfo_screenwidth() # 獲取螢幕大小 self.height= self.win.winfo_screenheight() self.win.overrideredirect(1) # 全屏設定 self.win.attributes('-alpha',0.3) # 以引數alpha的方式設定透明度 # 繫結事件 self.win.bind('<Any-Button>',self.exit_screensaver) # 單擊滑鼠即彈出
self.canvas=Canvas(self.win,width=self.width,height=self.height,bg='#00FFFF') self.canvas.pack() self.win.mainloop() def exit_screensaver(self,event): # 這裡必須要個引數event self.win.destroy() Screensaver() # 例項化

執行結果:在這裡插入圖片描述
可以看到,螢幕有透明的一層,這就是我們例項化的物件,它以cavans(畫布的形式),類似於photoshop裡面的畫層一樣,可以在上面不斷疊加畫層。

接下來,我們要建立文字類:Text_screen(),用它來建立文字,並使其能移動文字和建立文字。

class Text_screen():
    list_box = [i for i in range(20,1080,50)]  # 22 個個數,分別代表螢幕的高度位置
    i = 0 # 用來在高度上取值
    def __init__(self,canvas,ft,width,height,text_1):
        self.canvas = canvas
        self.ft = ft
        self.text_1 = text_1
        self.x_pos = width
        self.x_move = -1
        self.create_text()

    def create_text(self): # 建立方法
        self.x1 = self.x_pos-100
        self.item = self.canvas.create_text(self.x1,self.list_box[Text_screen.i],text=self.text_1,font=self.ft,fill='red',anchor=NW)
        if Text_screen.i == len(Text_screen.list_box)-1:
            Text_screen.i = 0
        else: Text_screen.i += 1

    def move_text(self): # 移動文字
        self.canvas.move(self.item, self.x_move,0)
        self.x1 += self.x_move

最後
我們來整合著兩個類:
在Screensaver()類中新增三個函式:

	def birth_list(self): #生成文字,
        i = randint(0,2064)
        self.str_text = linecache.getlines('six.txt')[i:i+21]  # 這裡需要匯入模組:linecache,並且這裡的檔案是單詞文字,要注意它的編碼格式。
        if self.i == 1:
            for my_text in self.str_text:
                txt = Text_screen(self.canvas,self.ft,self.width,self.height,my_text)
                self.list_.append(txt)
        else: pass
    def exit_screensaver(self,event):   # 這裡必須要個引數event
        self.win.destroy()

    def run_screensaver(self): # 迴圈體 ,不斷更新螢幕內容
        if self.i == 1:
            for emumt in self.list_:
                emumt.move_text()
                if emumt.x1<= -30:
                    emumt
                    self.i = -1
                    self.delect()
                    self.list_ =[]
                    self.birth_list()
                    for my_text in self.str_text:
                        txt = Text_screen(self.canvas,self.ft,self.width,self.height,my_text)
                        self.list_.append(txt)
                    break
        else:
            self.i *= -1
        self.canvas.after(1,self.run_screensaver)  # 第一個引數是間隔事件吧?第二個是呼叫函式

    def delect(self):# 不斷的刪除螢幕物件
        for em in self.list_:
            self.canvas.delete(em.item)

這裡我們就講完所有的步驟了,大致的執行結果如圖:在這裡插入圖片描述

需要注意的是:這裡的單詞是我在網上下的,如果下載好的六級單詞,不是utf格式的需要使用記事本 -> 另存為 -> 選擇格式。
總結
缺點:
1、這裡面的程式碼可以簡練很多的,最近沒時間去看,只是粗略的完成了效果,希望大家多多指教。
2、可能對於cpu的消耗有點大,正如上所說,完全可以簡化程式碼。
3、請大家多多指點。

大家可以在我的部落格中下載原始碼和txt檔案的壓縮包
或者在github上檢視程式碼:github

謝謝大家!!!