【項目5】圖形化詞典軟件

  1 import urllib.request
  2 import json
  3 """
  4 1, 把本文件改爲 main.py 文件名
  5 
  6 
  7 2, 從此須要編寫圖形界面程序, 咱們使用 kivy 這個開發框架來作這件事, 先安裝 kivy
  8 
  9 Windows 安裝方法:
 10     0, 打開 cmd
 11 
 12     1, 輸入 python --version 檢查並確保安裝的是不是 Python 3.6.5
 13 
 14     2, 在命令行輸入如下命令進行安裝,須要必定的時間,耐心等待,若是有錯誤到羣裏提問討論
 15     python -m pip install --upgrade pip wheel setuptools
 16     python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
 17     python -m pip install kivy.deps.gstreamer
 18     python -m pip install kivy
 19 
 20 
 21 
 22 Mac 安裝方法(請嚴格按照指令執行, 不要自創):
 23     0, 下載羣文件中的 Kivy-1.10.0-osx-10.12.5-python3.5.dmg 文件
 24 
 25     1, 確保你的系統是 10.12 以上
 26 
 27     2, 雙擊 dmg 文件打開, 把 Kivy.app 拖入 /Applications 目錄
 28 
 29     3, 完成步驟 2 後
 30         1) 右鍵(必須右鍵) MakeSymlinks 文件
 31         2) 點擊打開
 32         3) 在彈出的對話框中點再點擊打開
 33         4) 彈出的終端窗口顯示 [Process completed] 後能夠關閉
 34 
 35     4, 進入 /Applications 目錄找到 Kivy.app 文件
 36         1) 右鍵(必須右鍵)
 37         2) 點擊打開
 38         3) 在彈出的對話框中點再點擊打開
 39 
 40 
 41 3, 運行程序
 42 可使用 Pycharm 編輯代碼
 43 
 44 Windows 運行代碼方法:
 45 在 pycharm 中運行
 46 
 47 Mac 運行代碼方法
 48 把代碼放在桌面上, 更名爲 main.py
 49 運行代碼須要在 終端 中進行
 50 打開終端, 輸入下面的命令運行程序(能夠複製粘貼)
 51 kivy ~/Desktop/main.py
 52 
 53 
 54 
 55 4, 參考下面的代碼, 結合項目 4, 實現一個圖形化查詞軟件
 56 """
 57 from kivy.app import App
 58 from kivy.config import Config
 59 from kivy.uix.textinput import TextInput
 60 from kivy.uix.boxlayout import BoxLayout
 61 
 62 
 63 def openurl(url):
 64     # 下載頁面, 獲得的是一個 bytes 類型的變量 s
 65     s = urllib.request.urlopen(url).read()
 66     # 用 utf-8 編碼把 s 轉爲字符串並返回
 67     content = s.decode('utf-8')
 68     return content
 69 
 70 
 71 def translate(word):
 72     """
 73     word 是一個不包含空格的單詞
 74     """
 75     key = '3C2D3651D97914DC028F61B2C4F883C0'
 76     url = 'http://dict-co.iciba.com/api/dictionary.php?type=json&key={}&w={}'.format(
 77         key, word)
 78     s = openurl(url)
 79     d = json.loads(s)
 80     d = d['symbols'][0]['parts']
 81     result = []
 82     for i in d:
 83         key = i['part']
 84         value = i['means']
 85         result.append(key)
 86         result.append('\n')
 87         for j in range(len(value)):
 88             result.append(value[j])
 89             result.append('\n')
 90     string = ''
 91     for i in result:
 92         string = string + i
 93     return string
 94 
 95 
 96 def font_name():
 97     """
 98     蘋果系統和微軟系統須要不一樣的字體文件
 99     """
100     from sys import platform
101     if platform == "darwin":
102         return 'Arial Unicode'
103     elif platform == "win32":
104         return 'SimHei'
105     else:
106         print('not support')
107 
108 
109 # 程序必定是一個繼承自 App 的 xxApp 類做爲起點
110 class TestApp(App):
111     # build 函數是固定的, 它用於生成界面
112     def build(self):
113         self.config_window()
114         root = self.setup_ui()
115         return root
116 
117     def config_window(self):
118         """
119         這裏設置了 3 個屬性, 這是固定的寫法
120         分別是 禁止縮放, 寬度 400, 高度 600
121         """
122         Config.set('graphics', 'resizable', False)
123         Config.set('graphics', 'width', 400)
124         Config.set('graphics', 'height', 600)
125 
126     def setup_ui(self):
127         """
128         程序窗口必須有一個 layout(佈局), 全部的按鈕/文本框之類的東西都必須添加在佈局中
129         咱們把 按鈕 文本框 這類的東西叫作 控件
130         咱們這裏用了 boxlayout, 先無論, 用起來
131             orientation='vertical' 表示這個 layout 裏面的東西是豎直排列的
132             豎直排列的狀況下, 一個控件默認是橫向填滿, 平分高度
133             這個例子中咱們添加了 2 個文本框, 因此他們每一個佔據一半的高度
134         """
135         layout = BoxLayout(orientation='vertical')
136         # textinput 是文本輸入框, multiline=False 表示這是一個單行文本框
137         input = TextInput(multiline=False)
138         # 給 input 綁定一個事件 on_text_validate
139         # 這個事件是在按回車的時候觸發的, 也就是說你按回車的時候 self.check 函數會被調用
140         input.bind(on_text_validate=self.check)
141         layout.add_widget(input)
142         #
143         result = TextInput()
144         # kivy 默認不支持中文字符顯示, 必須手動指定包含中文的字體文件才能夠顯示中文
145         # 由於 mac 和 win 的字體文件不一樣, 因此咱們用一個函數來判斷具體使用哪一個字體文件
146         result.font_name = font_name()
147         layout.add_widget(result)
148         # 把 result 這個輸入框用類的屬性存起來以後要使用
149         # 類屬性在類的任何函數中均可以建立, 並不必定要在 __init__ 中建立
150         self.result = result
151         #
152         return layout
153 
154     def check(self, input):
155         """
156         input 就是觸發回車的輸入框控件
157         """
158         # input.text 能夠獲取這個輸入框中輸入的文本
159         print('check, ', input.text)
160         s = translate(input.text)
161         # 咱們在這裏能夠設置 result 輸入框的文本
162         self.result.text = s
163 
164 
165 def main():
166     # 生成 App 並運行
167     TestApp().run()
168 
169 
170 if __name__ == '__main__':
171     main()
相關文章
相關標籤/搜索