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()