Python 入門指南

單元 27 - 完成版的 EncryptController

~~學習進度表~~

我們發展編碼軟體的運算核心為 Encrypt 類別 (class) ,放在 encrypt 模組 (module) 中,至於使用者介面為 EncryptView 類別,這放在 encrypt_view 模組,負責 EncryptEncryptView 溝通的則是 EncryptController 類別,放在 encrypt_controller 模組

encrypt.py
     Encrypt
encrypt_view.py
     EncryptView
encrypt_controller.py
     EncryptController

單元 25 建置 EncryptView新建編碼解碼 按鈕, 單元 26 完成 存檔載入 按鈕,現在剩下 清除拷貝 兩個按鈕還沒實際實作功能。

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

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

# 按下清除按鈕的事件
def cm(self):
  self.e = None
  self.userinput = ""
  self.result = ""
  self.app.ifd.delete(0, 200)
  self.app.ofd.delete(0, 200)

  self.app.dt["text"] = "已清除!"

這裡除了將 userinputresult 設定為空字串 (string)ifdofd 呼叫 delete() 刪除 0200 之間的字元內容, e 也重新設定為 None

self.e = None

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

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

清除工作完畢,訊息欄顯示 "已清除!"

self.app.dt["text"] = "已清除!"

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

# 按下拷貝按鈕的事件
def cm2(self):
  if self.result == "":
    m = "無法拷貝!"
    self.app.dt["text"] = m
  else:
    self.app.clipboard_clear()
    r = self.result
    self.app.clipboard_append(r)
    m = "已拷貝!"
    self.app.dt["text"] = m

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

r = self.result
self.app.clipboard_append(r)

來執行看看囉!下面是 清除

下面是 拷貝

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

好了,我們已經學完開發功能完整的「編密碼小工具」了,下一單元繼續介紹第三方程式庫及 Django 。

中英文術語對照
類別class
方法method
模組module
參數parameter
字串string
使用者user
重點整理
1. 運算核心 M 為 Encrypt 類別,放在 encrypt 模組,使用者介面 V 為 EncryptView 類別,這放在 encrypt_view 模組,控制運算核心跟使用者介面的 C 為 EncryptController ,放在 encrypt_controller 模組,三個模組各有各自專屬的任務。
2. 清除就是清除所有輸入,也就是將所有設定歸零。
3. 拷貝到系統剪貼簿是利用 Tk 提供的 clipboard_append() 方法。
問題與討論
1. 清除的目的是清空所有輸入及輸出,除了上面所提的方式外,有更好的方式嗎?
2. 為什麼拷貝到系統剪貼簿前要先呼叫 clipboard_clear() 方法?
練習
1. 承接上一個單元的猜數字遊戲,這個遊戲雖然已經完成,並不意味著開發終止,想一想完整的猜數字遊戲應該要有哪些功能、怎麼樣的使用者介面。
2. 承上題,重新設計介面,實作構思好的功能,使之成為猜數字遊戲的另一個版本。

相關教學影片

上一頁 單元 26 - 存檔與載入
回 Python 入門指南首頁
下一頁 單元 28 - 認識第三方程式庫與 Django
回 Python 教材首頁
回程式語言教材首頁