我們發展編碼軟體的運算核心為 Encrypt 類別 (class) ,放在 encrypt 模組 (module) 中,至於使用者介面為 EncryptGUI 類別,這放在 encrypt_gui 模組
單元 24 建置 EncryptGUI 的 New 、 Encode 及 Decode 按鈕,單元 25 完成 Save 及 Load 按鈕,現在剩下 Clear 與 Copy 兩個按鈕還沒實際實作功能。
完整程式請參考「範例程式碼」的 encrypt.py 及 encrypt_gui.py 。
Clear 的目的就是用來清除使用者 (user) 輸入與結果,程式如下
153 | # 按下 Clear 按鈕的事件 |
154 | def 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.userinput 、 self.result 設定為空字串 (string) , self.ifd 與 self.ofd 呼叫 delete() 刪除 0 到 200 之間的字元內容, self.e 也重新設定為 None
135 | self.e = None |
這裡清除文字輸入框的方式為使用 delete() ,並且預期使用者的輸入長度沒有超過 200 的字元。
因此使用者點擊 Clear 之後,所有設定都會歸零,如果要編碼或解碼文字必須重新輸入文字,也都得 New 或 Load ,才能順利 Encode 或 Decode 。
清除工作完畢,訊息欄顯示 "It's done." 。
Copy 則是把編碼結果拷貝到系統剪貼簿,當然,如果使用者沒有按過 Encode 或 Decode , self.result 就會是空字串,這樣拷貝是沒有意義的,因此這裡先做個條件判斷
163 | # 按下 Copy 按鈕的事件 |
164 | def 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)
171 | self.clipboard_append(r) |
來執行看看囉!下面是 Clear
下面是 Copy
拷貝過後就可以貼到其他地方
好了,我們已經學完開發功能完整的 EncryptGUI 了,下一步是?
中英文術語對照
類別 | class |
模組 | module |
使用者 | user |
字串 | string |
方法 | method |
參數 | parameter |
重點整理
- 運算核心為 Encrypt 類別,放在 encrypt 模組,使用者介面為 EncryptGUI 類別,這放在 encrypt_gui 模組,兩個模組各有各自專屬的任務。
- 清除就是清除所有輸入,也就是將所有設定歸零。
- 拷貝到系統剪貼簿是利用 Tk 提供的 clipboard_append() 方法。
問題與討論
- 清除的目的是清空所有輸入及輸出,除了上面所提的方式外,有更好的方式嗎?
- 為什麼拷貝到系統剪貼簿前要先呼叫 clipboard_clear() 方法?
練習
- 承接上一個單元的猜數字遊戲,這個遊戲雖然已經完成,並不意味著開發終止,想一想完整的猜數字遊戲應該要有哪些功能、怎麼樣的使用者介面。
- 承上題,重新設計介面,實作構思好的功能,使之成為猜數字遊戲的另一個版本。
the end
沒有留言:
張貼留言