Python 入門指南 V2.00 - 單元 26 - 完成版的 EncryptGUI




我們發展編碼軟體的運算核心為 Encrypt 類別 (class) ,放在 encrypt 模組 (module) 中,至於使用者介面為 EncryptGUI 類別,這放在 encrypt_gui 模組



單元 24 建置 EncryptGUINewEncodeDecode 按鈕,單元 25 完成 SaveLoad 按鈕,現在剩下 ClearCopy 兩個按鈕還沒實際實作功能。


完整程式請參考「範例程式碼」的 encrypt.pyencrypt_gui.py

Clear 的目的就是用來清除使用者 (user) 輸入與結果,程式如下


153# 按下 Clear 按鈕的事件 
154def cm(self):
155   self.e = None
156   self.userinput = ""
157   self.result = ""
158   self.ifd.delete(0, 200)
159   self.ofd.delete(0, 200)
160
161   self.dt["text"] = "Clear all!!"

這裡除了將 self.userinputself.result 設定為空字串 (string) , self.ifdself.ofd 呼叫 delete() 刪除 0200 之間的字元內容, self.e 也重新設定為 None


135self.e = None

這裡清除文字輸入框的方式為使用 delete() ,並且預期使用者的輸入長度沒有超過 200 的字元。

因此使用者點擊 Clear 之後,所有設定都會歸零,如果要編碼或解碼文字必須重新輸入文字,也都得 NewLoad ,才能順利 EncodeDecode


清除工作完畢,訊息欄顯示 "It's done."


Copy 則是把編碼結果拷貝到系統剪貼簿,當然,如果使用者沒有按過 EncodeDecodeself.result 就會是空字串,這樣拷貝是沒有意義的,因此這裡先做個條件判斷


163# 按下 Copy 按鈕的事件 
164def cm2(self):
165   if self.result == "":
166      m = "Copy denied!!"
167      self.dt["text"] = m
168   else:
169      self.clipboard_clear()
170      r = self.result
171      self.clipboard_append(r)
172      m = "It is copied."
173      self.dt["text"] = m

如果不是空字串就會進行拷貝到剪貼簿的動作,這裡是用 Tk 本身 Frame 類別的 clipboard_append() 方法 (method) ,然後直接以 self.result 當參數 (parameter)


171self.clipboard_append(r)

來執行看看囉!下面是 Clear



下面是 Copy



拷貝過後就可以貼到其他地方



好了,我們已經學完開發功能完整的 EncryptGUI 了,下一步是?


中英文術語對照


類別class
模組module
使用者user
字串string
方法method
參數parameter

重點整理


  1. 運算核心為 Encrypt 類別,放在 encrypt 模組,使用者介面為 EncryptGUI 類別,這放在 encrypt_gui 模組,兩個模組各有各自專屬的任務。
  2. 清除就是清除所有輸入,也就是將所有設定歸零。
  3. 拷貝到系統剪貼簿是利用 Tk 提供的 clipboard_append() 方法。


問題與討論


  1. 清除的目的是清空所有輸入及輸出,除了上面所提的方式外,有更好的方式嗎?
  2. 為什麼拷貝到系統剪貼簿前要先呼叫 clipboard_clear() 方法?

練習


  1. 承接上一個單元的猜數字遊戲,這個遊戲雖然已經完成,並不意味著開發終止,想一想完整的猜數字遊戲應該要有哪些功能、怎麼樣的使用者介面。
  2. 承上題,重新設計介面,實作構思好的功能,使之成為猜數字遊戲的另一個版本。

the end

沒有留言: