brief introduction
Package Python programs as executable files exe
have access to pyinstaller , you can also use Nuitka
This article mainly introduces the use of Windows pyinstaller
install
To avoid packing files that are too large, use the virtual environment control package
Install virtual environment management pack under Windows virtualenvwrapper-win
pip install virtualenvwrapper-win
Create a new virtual environment. By default, it exists in C:\Users\Administrator\Envs
mkvirtualenv test
PyCharm configuration
File → Settings → Project: xxx → Python Interpreter → icon for setting → Add → System Interpreter → select C: \ users \ administrator \ envs \ test \ scripts \ python Exe → OK (can be renamed in Show All)
Enter virtual environment
workon test
Install packaging tools
pip install pyinstaller
Preliminary test
1.py
print('Hello World!') input()
pack
pyinstaller -F 1.py
Run 1.0 in dist folder Exe, only 5.9 MB in size
Further compression
This article uses UPX 3.96
UPX It is a free, portable, extensible and high-performance executable packer
use UPX Further compression
download upx-x.xx-win64.zip , upx Exe to the same folder, or use -- upx dir = XXX to specify the path
Execute package command
pyinstaller -F 1.py
effect
Package GUI
Use the API of China Weather Network to write an application for querying weather
Update the requests package, otherwise an error is reported ModuleNotFountError: No module named 'requests'
pip install requests --upgrade
2.py
import requests import tkinter as tk from tkinter import ttk from tkinter import scrolledtext cities = { 'Macao': 101330101, 'Beijing': 101010100, 'Changchun': 101060101, 'Changsha': 101250101, 'Chengdu': 101270101, 'Chongqing': 101040100, 'Fuzhou': 101230101, 'Guangzhou': 101280101, 'Guiyang': 101260101, 'Harbin': 101050101, 'Haikou': 101310101, 'Hangzhou': 101210101, 'Hefei': 101220101, 'Hohhot': 101080101, 'Jinan': 101120101, 'Kunming': 101290101, 'Lhasa': 101140101, 'Lanzhou': 101160101, 'Nanchang': 101240101, 'Nanjing': 101190101, 'Nanning': 101300101, 'Shanghai': 101020100, 'Shenyang': 101070101, 'Shijiazhuang': 101090101, 'Taipei': 101340101, 'Taiyuan': 101100101, 'Tianjin': 101030100, 'Urumqi': 101130101, 'Wuhan': 101200101, 'Xi'an': 101110101, 'Xining': 101150101, 'Hong Kong': 101320101, 'Yinchuan': 101170101, 'Zhengzhou': 101180101 } def get_weather(city): """Get weather""" url = 'http://wthrcdn.etouch.cn/weather_mini?citykey={}'.format(city) res = requests.get(url) data = res.json() if data['status'] == 1002: return data['desc'] data = data['data'] result = '{}weather forecast\n'.format(data['city']) result += 'Real time temperature:{}℃\n'.format(data['wendu']) for forecast in data['forecast']: result += '{}: '.format(forecast['date']) weather = '{} ~ {}'.format(forecast['low'].replace('low temperature ', '').replace('℃', ''), forecast['high'].replace('high temperature ', '')) result += '{} {}\n'.format(weather, forecast['type']) result += '{}'.format(data['ganmao']) return result def command(): weather = get_weather(cities[city.get()]) scr.configure(state=tk.NORMAL) scr.delete(1.0, tk.END) scr.insert(tk.END, weather) scr.configure(state=tk.DISABLED) win = tk.Tk() win.title('Query the weather of provincial capital cities') frame1 = tk.Frame(win) frame1.pack(fill=tk.X) city = tk.StringVar() city_chosen = ttk.Combobox(frame1, width=12, textvariable=city, state='readonly', font=('Microsoft YaHei ', 11)) city_chosen['values'] = list(cities.keys()) city_chosen.current(0) city_chosen.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5, pady=5) button = tk.Button(frame1, text='query', command=command, font=('Microsoft YaHei ', 11)) button.pack(side=tk.LEFT, padx=5, pady=5) frame2 = tk.Frame(win) frame2.pack(fill=tk.BOTH, expand=True) scr = scrolledtext.ScrolledText(frame2, wrap=tk.WORD, state=tk.DISABLED, font=('Microsoft YaHei ', 11)) scr.pack(fill=tk.BOTH, pady=5, padx=5, expand=True) win.geometry('600x300+300+300') win.minsize(200, 200) win.mainloop()
effect
-w package without console
pyinstaller -F -w 2.py
be careful! MacOS cannot use tkinter directly
Icon
use Online picture to icon Or in Alibaba vector icon library
Package with icon, -i specify Icon
pyinstaller -F -i 1.ico 1.py
effect
parameter
For details: pyinstaller parameter
Packaging: pyinstaller - F 1 py
Package without console: pyinstaller - F - W 1 py
Specify icon and package without console: pyinstaller - F - W - I 1 ico 1. py
Package PyQt5
In this paper, PyQt5==5.15.4
install
pip install pyqt5
weather.png needs Self conversion For weather icon
qrc_rc.py
from PyQt5 import QtCore qt_resource_data = b'\x00\x00\'\xdd\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x01\x00 \x00\xc7\'\x00\x00\x16\x00\x00\x00\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x00\x00\x00\x01\x00\x08\x06\x00\x00\x00\\r\xa8f\x00\x00\'\x8eIDATx\xda\xed\x9dy\xbc$U\x95\xe7\x7f\xe7Fd\xbe\xad\xea\xd5[\x0b\x8b\xb5\n\xa8\xa2VJ\x16\x91f\x13l?\x0c\x8akK\xabc\xe3\xd6*\x1f\xc7\xcf\xc0\xb4\xe3|\xc6V\x1b\x9bQ\x9c\xb6\x1d\xa7\xa7\xdb\xa5[\xa6G\xc5O\x8b\x0b\xd0\x82\xad|\x10\x1d\xa4\x14\xa5\x1d\x01\xb5\xa1V\n(\x8ab\xa9*\xeam\xf9^\xbe\xcc\x97\x11\xf7\x9e\xf9#"\xdfVo\xc9%"nd\xe6\xf9\xf2)\xa1\xd2\xcc{\xcf\x8d\x88s\xe2\xdcs\xcf=\x17\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04A\x10\x04!Q\xc8\xb6\x00Bk\xc3{\xcf:\x11\x9a\xcf\x009\xdd`\xd3\tE\x9dP\xce\nh\xb5\x02\xca\xed\x02\x14@n\x01\x8c\x02X\x15\xe0\x9a<t)\x07S<\x8a\x8e\xc2^Z\xf7\xcc\xa8\xed142b\x00\x84D\xe0\xfdg\x0e\xc2t\\\x0c\xb4m\x07\xbb[\xa0\x9c\xf5\x80Z\x0fP\xa0\xe4 @)\x80\xaby$}@\xeba(\xde\x0f6\xfba\xcc\x1e\xb0\xf97\x98\x89\x9f\xd3\xd6\xdd\x13\xb6\xc7\xdc\x08\x88\x01\x10b\x81\xf7l\\\x0b\xb5\xeaJ\x90s9\x8cs\x11\x94{\x1a\xc8\x99\xf9\x029\x00\x1c\x00\nL\xa1\x01\x80\x03\x02\xc00 b\x80\r\xc0\x0c\x80\x01\xf6\x01\xe8\n;7\x06\xc4{a\xf4\xbf\x82\xbc\x9f\xa1\xed\xf9{\xe9\xb4gGl_\x934"\x06@\x88\x0c~\xfa\x82K\xe1e>\x00\xa5^\x0b\xca\x0e\x82\t \x07\x8c,@m \x95\x01\x93\x0b\xc0\xad\xb1\x07\x03\x82\x0ff\x1fd<\x00>\xc0^\xf0gi\xc9\x00\xed=\x01\xf2\x7f\x04*}\x856<\xf2\xb4\xedk\x95\x16\xc4\x00\x08u\xc1/\\|*\xf2\x99\x0f\x83\xd5\xdbA\xceZ\xa86\x00Y\xb0\xca\x02\x94E\xf0\x96\x8f\x17\xe2"\xd8\x14@<\x19x\r\xcb\xa1\xbd\xdfB\xe9o\xc2\xbc\xf4\r\xda\xb8o\xdc\xf65\xb4\x89\x18\x00\xa1&x\xffE\xef\x02g>\x0cj\xbb\x90U;Hu\x80\xa9\x1d\xc1|\xde\x1e\x811\x98\x04\x99I\x00\xbc\xcc \x0c\xc0\xe6\x07p\xf8\xef\xe8\xcc\x9f?`UpK\x88\x01\x10*\x86\x19.\x9ex\xe5u@\xf7\x7few\xc5iP\x1d\x00\xb5\xd9\x16k\x114\xc8\xe4\x00]i,\xd0<\nS\xb8\x99\xce\xfa\xd7\xbbmK\x9e$b\x00\x84e\xe1C\'w \xbf\xfaz8=\x1f\x853\xb0\x9aU\x97m\x91\xaa\xc0\x0f\rA\xbe\xc2\xef{{\xa0\'\xff;\xcez\xf8\xdbD\xa8`>\xd1\xd8\x88\x01\x10\x16\x85\x19\x84=g\xff)\x9c\x81\xbf\xe6\xec\xea~P\x87m\x91\xea\x18\xcc\x14\xc8\x1fB\xe5+\t\xc5\xfd\xe0\xdc\xfb\xe9\xac\xc7\x1e\xb4-z\x9c\x88\x01\x10\x16\x84\x9f\xd8\xfcr\xd0\x9a\xdb83\xb8\x19h`\xc5\x9f3(\r\xd2\xc7\x00.U\xf8\x03\x03\xe8\xfc\xdd0\xb9\x0f\xd3\xe6=/\xda\x16?\x0e\xc4\x00\x08s\xe0]\x9b\xfb\x8c\xdb\xf7e\x959\xf1\x1d\xac\xba\x9a\xf0\xf9`@\x8f\x80L\xa5S\x02\x00\xec\x17\xa0\xf3\xff\x03\x1b\x1f\xbe\x99\x08\xcb\xad96\x14Mx\x83\x85Z`\x86\x83=[\xaegw\xcdg\x90=i\x85\xedh~\xec\x98\t\x90\xae27H\x17\x9f\x05r\xd7\xd3\xc6\xc7\xfe\xc5\xb6\xf8Q!\x06@\x00?\xbd\xee\x04L\xf5\xde\xc3\xd9\xb5\xe7\xc1Ye[\x9c\xe4\xf0\x87\x82\xdc\x81\xaa0\x80?v\'t\xe1Oh\xeb\xeeJ\xe7\x12\xa9E\x0c@\x8b\xc3\xbb7]\x06\xd5s\x17\xb7\xad\xed\x03\xb5\xdb\x16\'\xe1\xc13\xe0\x1f\x06\xc1\xaf\xfe\xb7\xa6\xb0\x0f\x94{\x1dmx\xbc\xa1\xb3\n\x9b\xdc\xcf\x13\x16\x83\x19\xc4{6~\nn\xff\x03\xdcvz\xeb)?\x00\x10\x01n_m\xbfU\x1dg\x01\x03\x8f\xf1\xfe\x0b\xfe\xd8\xf60\xea\xba\x04\xb6\x05\x10\x92\x87\x19.vo\xf9gd\x06\xdf\xc8\x99\x93\x01\xca\xd8\x16\xc9*\xa4\x8f\x01\xa6P{\x03\xec\x7f\x966\xec\xf8\x0b\xdb\xe3\xa8i\xec\xb6\x05\x10\x92\x85\x0f\x9d\xdc\x81\xf1U\xf7!\xb3\xe6Rv\xd7\x00T\xeb\xc6\x9c\xe6\x81\xcc$\xa0\x87\xeak\x84\xf5m\xb4\xe1\x81km\x8f\xa5\xea\xb1\xdb\x16@H\x0e>xj/\xf2\xabv\xc0\x1d8\x9b3\'\xb5\xfc\x9b\x7f\x06\x06y\xcfc\xd9\xbd\x03\xcb\xa2~\x0c8o\xa6\xf5\xf7N\xd9\x1eQ\xc5\x12\xdb\x16@H\x06\xde\xb7\xe1$L\xf6>\x02w\xf0l\xb8\xfd\xa2\xfcs @E\x11\x031W\x01z\x07\x1f|g\xaf\xed\x11U\x8a\x18\x80\x16\x80\xf7l\xdc\x00\xd3\xf9(\xdc\x81\xd3Yu\x82\xd5J\xdb"\xa5\x90\xa8\x0c\xa2\xb9\x10\xde\xd0\x83\xfc\xd4\xbbN\xb5=\xa2J\x10\x03\xd0\xe4\xf0\xeeMk\x80\xb6\x1dp\xfaO\x00\x1c\xc0\xa91\xea\xdd\xe4p\xdd\xee\xff\xec\xc6\xf4\x16\x98\x97\xee\xe5\x17>:`{\\\xcb!\x06\xa0\x89\xe1]\x9b\xfb\x00\xf7\x17p\x07\xd6\x80\x08\xc1\xf6\xdd\xf8\x0bt4"\x14\xa5\x01\x00\x00\xf8\x9b\x91\xdf\xfdC\x1e\xba\xa9\xdb\xf6\xd8\x96B\x0c@\x93\xc2\x87N\xee\x00\xb9;\x90\x19<\xb3\x1c\xebe\xea\xb4-V\x8b\xe1]\x88\x91\x87\xbf\xc7/\xdc\x92\xda\x0b/\x06\xa0\ta\x86\x83\x89\x9e\x1f#\xd3\xbf\xad|\x8b\x19nD\x81\xae&\xa5\xe2\x1d\x82\xd5\xb6;u\x15\x8a\xf7\xfc\x03\x1f\xfa\x9bTn\xa9\x14\x03\xd0\x8c\xec\xd9t;T\xffe\xb3\xeb\xf1\x91J\xedK(\x05\xe8\xf8\x0c\x00\x00\xe8\xc9w\xa3\xf4\xe0\xa7l\x8fr!\xc4\x004\x19\xbck\xe3\xc7\xe1\xf4\xff\x11\xd4\xdc\xa86\xcb\xb2\xdf\xa2\x04\xf5\x03cF\x0f}\x8cwm\xb8\xd4\xf6X\xe7#\x06\xa0\x89\xe0}\x1b\xb6\xc3\xe9\xfe\xb4\xb8\xfaU\xa2\x930\x00y\x02\x9c\xdb\xf9\xc0\xda\x1e\xdb\xc3\x9d\x8d\x18\x80&\x81wn^\x01\xdd\xf9/p\xba\x17\xcc\xed%\x92[\xbd \xec\x03\x88yW/\x97\x00\x9e\x04\x08/C\xa1\xfd[\xb6\x87<\x1by*\x9a\x05\xa5\xfe\tn\xef\xa2\xc9\'\x1c\xf5*W\x93@\xf5\xee\x01X\x0ef\xc0\x9f]x\x84\xae\xe6]\x1b\xaf\xb7=\xee2b\x00\x9a\x00\xde\xbd\xe9\xddp{\xde\xbc\xf4\x1a\xbfl\xfb8\x0e\x9d\x8b7\xf8\x07\x00f\x148\xae\xde\x00}\x81wm\xdeb{\xf8\x80\x18\x80\x86\x87\xf7l\xec\x87j\xff\xcar\xfb\xf9\x89[\xfa\x00\x9c\xe3a\x0fd\xc6\xe2\xed\xc3L\x06\x7f\xe6C\xc8\x02\x9c\x8a\xa9\x80\x18\x80\x86\xc7\xf9\x02T\xef\x8a\xe5\xbe\xc5\xa6\x88\xfaw\xbb5\x0b\x9c\x80\xeb_\x00\x96\xaa9Hx9\xef\xd9x\x9d\xed+!~a\x03\xc3{6n\x03\xf5?\x06\xa7\xc2\x1c\x13w0<\xbe\xab\x95a\x90\x7f\x0c\xe0b\x8c]\x14\x00\x7f\xb8\x12QF\xd0Y8\x9d\xd6=3j\xebj\x88\x07\xd0\xc8p\xe77+V~\x00\xaccvy\xd3\x0e\x1b\xc0\x7f)\x1d\xca\x0f\x00\x84^\x14:>k\xf3\x92\x88\x01hPx\xd7\xe6?\x85\xbb\xea\x9cj~C\\\x02L\xa5g\xe55\x1b\x06\xa4\x8f\x828\xc6Z\x1df\xb2r\xe5\x9f\x86\xff\x03\xef\xdb\xb0\xdd\xd6U\x11\x03\xd0\x800\xc3A\xa6\xfb\xafj\xd9\xd9Gz4\\\xfbn!X\x83\xfc#\x00\xc7x\xa6\x87\x99\\z\xce\xbf(D\xd0\xca\x9a\x17 \x06\xa0\x11\xd9\xb5\xe5}\xa0\xae\xd5\xb5\xfd\x98\xeb\xaf\x7f\xd7@\x90\x19\x03\xf9/\xc6h\xf4\x180\xb9\x1a\x95\x7fZ\xca\xaby\xcf\xc6m6\xae\x8f\x18\x80F\xc4\xed\xfed=\xf1[\xe2\x12\xe0\x1fCS\xaf\n\xb0\x07\xf2\x0f\x07k\xfd\xb1\x8d\x93\x01=\x0c\xe8\x08\x96X\r>\x96\xe4\xe5)#\xab\x00\r\x06\xef\xdb\xfev\xd0\xc0wA\xf5\xdf:\xa6\x0c\xe0\x0e\x00h\xae\xca\xc0d\xc6B\xa5\x8c\xd1\xc0\xb1\x01\xf4\xb1\x08\xa7\x15l@8\x836\xed}&\x81K4\x8dx\x00\r\xc7\x8a\x1b\xa3P~\x00 \xf6\x00\xef\x08\x10g`,1\x18\xd0\x13 \xff\x85\x98\xdf\xfa\x08\xa6\x13\xfe\xd1\x88c\n\xa4\xc0\xf8/q_\xa5\xe3zM\xbaC\xa1v\xf8\xf1\xadW\xa2\xfd\x84\xfb\xe2\xb8m\xac:\x11\x9c\x0b\xd8h\xde\x80\t\x0e\xfa4\x13\x00\xeb\xf8\xbb\xe3)\xc0\x1fB,\x06\x86QB\xd6;\x99\xd6?\xf9R\xfc\x03\t\x10\x0f\xa0\x91\xc8\xac\xf8\xb3\xb8l6\x99I\x90\xf7b\x98$\xd3\x08g^j\x90\x1e\x03y/\x80\xf4X\x02\xca\xcf\x80\x19\x8f7vB\xc8\xa2\xe4~ \xe6\x81\xcc\xebRh\x08\xf8\xa9\xd3W\xc1?\xf5\x18\x94\x9b\xcc+Zu\x065\x04U;R\xf3\x98\xb0\x0f\xe2B\xb0\xe4\x96\xa4\x91b\x1d\x04\xfb\x92\xe9s\x17m\xde\xb35\xa9\xa1\x89\x07\xd0(\xe8\xc1\xf7&\xa6\xfc\x00`&A\xfa\x18\xc8{\x1e\xa4_\x02\xf4\x04\x80\x04\\\xec\xe3\xf0\x83e6\xefp\xb0\x9c\xa7G\x93U~=\x19\xce\xf7\x13\xebs\x0b\xef\xda\\U\x82W=4\xda\x84\xafu1\xd9w\xc1JEo\x06L\x11\x84"`F\xc0\xc8\x80\x9c,\x80,\x98\xb2\xe1\tCQy\x08>`JAp\x92K\x00JA\xb4\xdd\n&X\xdb71\xa6\r/\xde\xf7\x9f\x00\xf8]\x12=\xa5\xc4\xb7\x13\x96\x82\xf7\x9es"T\xdf\xf3QE\xff#\x872\x00e\xc2\xba\x83\x0e\x02\xc7r\t\xe7\x92\x18\xc4>\xc0\x1a\x0c?\xfc\xef\x14\xc5\x1d\xb8\x18\x16\xf1\xb0`|\x98\x01\x0f/\xd1\xcb\xf7\xd6\x98\xe8U\x1d\xe2\x014\x02\xd4y}j\x95\x1f\x08\x96\xc3\xd8\xab\xe9m\x92\xaaQ\xb1\x01\xcc\xd8\xc2{\xf8\x13\xe9\x9f\xc3\xda!4\xc8\x8fo\xbc\x92\xb6\xed\xfdI\xdc]J\x0c\xa0\x11\xa0\xcc\xebm\x8b\xd0\xf4\xf0\x14\xe0\x1f\xb1\xa8\xfc\x00<\x0284\x89\x86\xdf\x94D\xb7\xe2\x01\xa4\x1c>\xbay\x05\xc6\x9cT\x94\x8fjN\x18\xd0c\x80\xc9\xdb\x13Ac\xa1\xf8\xea\x15It\x9d*\x0f\xacY\x19)\xf0Z.a\x93"lc\xc6)J\xa1\xd70V\x11\xa1\x9b\x11\xfc\x1b\x8cn\x02\xfa\xc3\x9f\x1cc \xc7@\xce\xe1\xa1\xacS\xda\xbf\x99\xf4\x04\x88\xc7A\xe6(\x1c\xef\x19(}\x10J\'\x96/\xd2\x9c\xf0T8\xd7\xb7\xb1\xba\x11b\xa6\xdd\xfe\xb9\x9f\x13\x80\x9e|\x1f\x9d\xf6l=\xbb\x8c\x96E\x0c@\x84\x8c\x8d\xf1\x99>\xe3<\x87\xb0\x8d\t\x9b\x89\xb0\x9e\x803Ah\x8f\xfaB3\x00\x98)(\xfd"\x94\xff\x1c\x1c\xfd\x1c\x94\x7f\x00Ni\'\x94>j\xfbR\xa4\x1c\x1d\xa4\x0b\xdbr\xf7g\x89\xb1\xa4\xedq\xbc\xb7\xd3\xb6\'o\x8fS\x04\x99\x02\xd4\xc1\xd0$\x9f\xac|\xfc!\x11\xae\x04\xe3U \x9c\xe4R2V\x95\x00@\xb5\x81\xd5Z\xe8\xcc\xda\xe9\xe7\x88\x01\x90\x7f\x14n\xe918S\x8f"S\xfa-\xc8T[\xa4\xa2Y\xe1p\xdf\xfe\x18\xac\xef\x84\xf4\x190\xcb=)\xee\xab\x01\xc4j\x00\xc4\x03\xa8\x02f^9\x92\xc3\x9b\x1c\xc2\x95\xacp\t1\xd6\xa598\x1f\xc8\x0c\x90\xff<\x9c\xd2\xbf!Sz\x18\x99\xa9\x87\x9bd\xf3O\xb5\x17\xc2\x0b\xd6\xf5\xe3,\nR)\x1e*\xb3?\xc4{i\xfb\xdeMq\x8a\x92\xf2\xc7\xd7>\xcc\xec\x8e\x8e\xe3\r\x0e\xe1\xbd\x06\xb8J\x11\xb2\xb6e\xaay,\x00XO\xc1\x9dz\x08m\x85\xfb\xe0\x96~\x0b\xebo\xc2\xd81\x80\x9f\x03\xd8b\x90\xaf\x0c#P\xfeJ!\x06\x1c\xd5F[w\xc7\x96$!\x06`\x11\xc6\xc6\xf8Bv\xf0\x01b\xbc\x85\x08}\xb6\xe5\x89\x1af\x80\xfdQd\x0b\xf7#[\xfa)\x1c\xef)\xdb"E=\xc2 }\xd9L\xc0JB\xcf|\x0c\x8e?\x1f\xa4\x12\\\xff\x1c\xda\xba\xff\xf7q\x89%\x06`\x16#\xcc=\xc8\xe1?\x93\x83\xf7(\xe0\xd4\xfa[L?\x0c\xc0\x18\x80\xbcCh+\xde\x83\xf6\xe2=\x96\xd2_#\x1c\x91)\x86\xf3|\x8b\xd1\xfd\xd9,\x17\xec[\n\x97\xdfI[\xf7~\'.\xd1$\x08\x08\xa0P\xe0\xd3<\x1f\x1f7\x13x\x97r\xd0i[\x9e$!\x00\x8e\x028{\n\x8a\x99\x0f\xa1\xd8y-\xda\nw\xa1\xbdp\x17\xc84\xd8iB<\x15(~\x1a\xe6\xf9e|\xd4\xeb\x80l\x8cS\xbc\x96\xf6\x00rS\xbc\x91=|\n\x8ck\x88\x90\xb1-O\x1a0\x1cx\x04\xe0)\xb4\x15\xeeA{\xe1\xce\xf4\xe7\x1b\xf0T2\xe7\xfcU%\x13\x02\xe5\xaf7\xc4B\xfa{\xb4\xfd\x89w\xc4%fK\x1a\x80\xd1<\x9fG\x8c\x9b\x00\xbc\x8e$\x1d\xfa8\x98\x03C\xc0\x0c\x80}d\x8b\xf7\xa3\xa3\xf0=(\xff\x90m\xd1\xe6\tZ\n\x15?e\xab\x1a\x06\x80\xe6\x99\xb4\xdez \xf3{\xda\xbe/\xb6\xed\xc1-e\x00&\'\xf9\xe4\x92\xc6\x97\x14\xe1\xcd\xb6eI;s\x8c@\xf0\t\xda\n\xf7\xa0#\xffu\xfbS\x03\xf6\xc3M;)\x8cU\x18\x06\xfc\x88\xd4\xca\x00\xf0\xb4G\xaf|"\xb6\x95\xa7\x960\x00\xcc\xdc9^\xc0\x8dF\xe3\x06E\xad5\xc7\xaf\x97\xe9)A\x08\x99qt\xe4oE[\xe1\x87H|\t\x915\xc0c\x80.\xd8\xbe,\x0b\xe3E\xf4\xd6\x07\x82\xa0\xe1\x14\x82\xa5\xc0\x95j%m\xdd\x1d\xcb\x91NMo\x00\xc6\'\xf9\xad\x86\xf17\xc4\xad\x11\xd5\x8f\x83\xf9F\x00\x00\x94\xff\x0c\xbar\xff\x13\xae\xbf7~\x01X\x07\xf5\xf8ln\xd8YR>D3\xdf/c\x00\x14\x18\xc1\x16p\x06V{\'\xd0\x99O\xc5\x92\xdf\xdd\xb4\x06`\xb4\xc8g\x90\x8f\xaf\x12\xf0\x1a\xdb\xb24\x03\xda\xcc\x9e\x0e\xcc\x90-\xfe\x0c\x9d\xf9[@:\x8et\xe3\xa0\xe2oP\x8e,\xa5\tKQ\xce\xf7\xcb\xed\x15\x19\xd3\xaaI\x0ct\xf2\xe9\xb4}\xdf\x818\xc4o\xca\x00\xd8\xd88\x7f\x18\x1e\x1e\x17\xe5\x8f\x0eEX\xb0&I\xa9\xfd\xd5\x18\xed\xbd\x15\xa5\xecE\xd1u\xc6\xe1f\x1d\xefH\xfc\x07|\xd4\x83\xe6 \xa7?*\xe5g\xccU\xfe2\xa5\xc9\xae\xb8\x86\xd0T\x06\x80\x99;\xc7&\xf8\x87D\xf8\x8a"T~n\xb6\xb0,DA\xbe\xc0\x82\xa8\x0e\xe4{\xfe\x1b&W\xfe\xa7\xb0F`\x8dp)8]\xd7?\x1c\xb8\xfci\xc8\xe0[\x0c\x8f\x01M\x88\xcc\x896\x1c\xb8\xfd\xf3\xdbc\x00YG\x0c\xc0r\x8c\xe4\xf9\x9c\xb1<\xf6\x12 \xd5sbD-\xf1\xbcOu\xbc\x1ec\xbd\x7f\x0f\xed\xac\xa9\xaeQ\x93\x0f\xaa\xf1\xf8/\x01\x9c\xd2\x00_\x99r>\x7fTo\xfd2S\xc0\xc2\xc6\x84\x00vb\x0b\\7\x85\x01\x18\xc9\xf1G\x15\xe3\xd7\n8\xc5\xb6,\xcd\xcer\xbb\x1f\x8d\xbb\x16\xb9\xbe\xff\x8dR\xdbe\xcb\xb4\xa4\xc3r\xdf/\x84\xa5\xbe\x1b\xe0\xc8r\x8d\xd0\xe5\x8f\xb8\xdd\xc2R\xd3\x08\x06L6\xb6z\xd0\r\x9d\n<\xc4\xdcM9\xdc\xa1\x14\xael\xdahf\xca \n\xbc\x00\xb3\x94\x12P;\xf2\xabn\x84W\xf8\t\xba&\xbe87Q\x87\xa7\x82\xc0^\x1a\xd7\xf0\x97b:\xa57\xe2\'\xad\x88\xa5\xbd\t"@\x15sq\r\xaba\r\xc0\xc4\x04\xbf\xcc\x1b\xc7CJa\x9d(\x7f\xb2(\x15\x14\xd0\xe5e\xde\x84\xa5\x8e+\xe1g\xd6c\xe5\xd0\xf5P\xe6p\xe0\xde/\xf7\xa3\xb4\x11\xf5\x12\xdfl\x8a\x95\x14\x05a@ql\x06\xa0!\xa7\x00\xa3\xa3|\x86\xcfxDQ\xfa\x0br\xb4:\xc6]\x87\xf1\xfe\xaf\xc0Pw\xe3)\xbf\xe1\xca\x8bwT\xcbT%\xca\x8f@C\xd9\x8d%\t\xa8\xdc|C12\xc1/g\x85\xdf\x10p\x92(\xbf=\xaa\xb9\xf6\xc6=\r\xb9\xc1\xefA\xbb\xebl\x8b]9>\xa2K\xe9\x9d\xcfTy\x05\xa1B\n\xc3\xe2\x01\x00\xc0P\x8e/b\x8d_*B\x9f(\xbf]\xaa\xbd\xfe\xec\x0cb|\xf0;\xf03\xb1\xeen\xad\x1f\x03\xa0\x84\xf8V \xabU~\x00t\xa1\x18\x00\x0c\x8f\xf1\xd5\xc4\xf8\x99\xe3\xa0K\x94\xdf>\xb5\xdc\x02V\xdd\x18\x1f\xf8\x16\xbc\xec\x05\xb6\xc5_\x98\xe9\x12\xdd11\x85\xaa\x95\x1f\x84X+\xba6\x84\x01\x18\x1d\xe7k\x00\xfc\xc8Qh\x13\xddopT\'&\x06o\x85\xd7~\x89mIf(\x07\xfa\xe2r\xf9\x81\xf0\xcd_\xc3\xef\x1c~:\xce\xa1\xa7\xde\x00\x0c\xe5\xf8\x0f\x8c\xc1mD\xd5\xbb\x9dB\xbc\xd4s;&\xfa\xbe\x04?\xb3\xcd\xf6\x10\xc2-\xb7\x887\xe9\xb0\x06\xb7\x7fF>\x1dk\xb1\xc6T\x1b\x80\xe1\t>\x1b\x06\xf7\x01\xc8:\xa9\x96T\xa8\x1aj\xc3\xc4\xc0?B\xbbk\xed\xc9PN\xec\x89\x93Z\xdc\xfei\x18\xc8d\x9e\x88S\xbc\xd4\xaa\xd5h\x81\xd7A\xe3gDX\xa9\xe4\xcd\x9fJ\xeaU\x9d &p+\x8c\x1aL^p\x0f\xa1K\x1e\xe3\xc3U\xac\xd1\xed/C\x00\xa0\xf7\xc7y)Ri\x00\xc6\xc7y\xd0L\xe1\xe7\x00\xfa\tA\xe2\x89\x90>\xa2P\x1dvV\x07F\x80V&#\xb4\xe6\xb0pG\x8c}\x94w\xf5U\xb2\xce\xbf\x14\x04\x80J\xad\xe5\x010\xf3\n\xcf\xe0\x01P\x90\xd7/\xf3\xfet\xc2\x88\xb0\xfeEf\x1d&\x06\xfe\x11\x1c\xe7\x99+\xd3o\xfd\x08w\xf0-F\xa5I>\xcb\xe1\x008\xa1\xb03NQSg\x00Fr\xb8\x03\xc0\xf4q\xd8b\x00\xd2I\xd4I}:{6&{>\x15\x8f\xb0&\x81\xb7>\x10\xb4_\x88H\xf9\x01@\xe1Yz\xd9\x91X\xcb \xa5\xca\x00\x8c\x8c\xf1\r\x00\xae*\xff]"\xff\xe9%\x8e\xac\xdeR\xd7\x1f\xa1\xd4\xf1\xda\x08\x85\xc4\xac\xe5\xbd\x98\x1f\xa4\xb2\xdb\x1f\xd96a\x06\x94\xd9\x11\xaf\xd0)2\x00\xc3\x13|6\x03_\x98\xfd\x99(\x7fz\x89+\xad?\xdfs3\xb4\x13A\xf9F\x83\xf0\x04\xde\x04.\x86\xc1\xf2\xbb\xfa\xaaE\x11\xa0p\x7f\xdc\xa2\xa7\xc2\x000\xf3\n\xf8\xf8\x010\xf7p\x0e1\x00\xe9$\xd6==\xaa\x03\x13\xfd_\x06\xd7zN\xcb\xf4[\x1f\xd1\x17\xedX\x88r\r\xbf\xa8\xaf\x892\x00\xf4\x8f\xe3\x16?\x15\x06`$\x87o\x81\xb0v\xfe\xe7\xa2\xff\xe9\xc4\xc4<\x976\x993Q\xe8\xf9\xf3\xda\x04K\xea\xad\x0f\x04K|\x0b\x95\xf1\x8a\x02\x85\xfd\xb4=\x9eJ\xc0s\xbb\xb1\xccP\x8e?\x00\xe0M\xf3?\x97\xb7\x7f:a$\xb3\xabw\xaa\xeb\xdf\xa3\xd4\xfe\x87\x15\n\x15n\xdb\xf5)\x99\xb7>\x10\x18\x9a)\xc4\xf7\xa0:\xb4#\x89aX5\x00\xb9\x1co\x84\xc1\x17m\xca T\x87I\xb0Ng\xbe\xf7\xaf`\xdc\x13\x97\xfe\x92\x06\xe0Q\xb2\x85\x83=\x00\xa5\x18\r\x8db\x80\xd5]I\x0c\xc5\xaa\x01\xf0\x19_#\xa9\xde\xdb0\xcc=*,\x01\xd4\n\xe4W-\xb24h\x10V\xe6MP\x1eF\xb0\xc6\x1f\xf7\xe1\xc3\x8a\x87\xe8\xdc\xdd\xf7&1$k\x06`x\x8c\xaf\x05\x10a1y!n\x92|\xfb\x97\xf1\xdb/\x83\xd7~\xf9\xdc\x0f5\x92\x0b\xf2\xcd\xa6\xae\xbc\xfe*p\xe8\xbbI\r\xc9\x8a\x01`\xe6\x15\x00\xfe\x97\x8d\xbe\x85\xda\xd0\x16K\xf4\xe7W\xdd\x18\xac\n0\x80R\xc2o}`\xe6\xa8\xae$\xae\x81b\x80\xf2\xb7&54+\x06`8\x87\x9b\x01\x0c,\xf9\xa5\x06+\x1f\xd7\xccp\xd2\xae\xff\xfc\xfe\xdd5(\xae\xb8.p\xf9\x93^\x1b\xd2\x888\xc1g\x19\x08O\xd2\xb9\x87\x1eIjx\x89\x1b\x80\\\x8e7\x10\xf0\x1f\x97\xfb\x9e\xe8\x7f:`\xb6\xfb\xf6/S\xec\xfe L\xb5\x07\x8e\xd4\x8b\xc7K\x1c\xd8\x11\x13\xae\xb9-\xc9!&n\x00|\xc67\x10lsX\x161\x02va\xa4C\xf9\x01\x00\x94E~\xe0\xa6\x84\x06\xcea\xb0/ao\xc3a\x0fd\xbe\x92d\x97\x89\x1a\x80\x911~7\xaa\x08\xfcqZ\x1e\xbe\x16\x84\x01\xe8\xa4\xe7\xda\xcb\xe0w^\x06\xaf\xf3U\xf1\x0f<\xa9`\xdf|\\s\x1b\x9d\xfb\xe4KIv\x99\x98\x01`f\xc7\x00\x9f\xab\xe67qg\x9c\t\x0b\xc3\x00L\xca\x94\xbf\xccd\xdf\xc7\xe2\xf3\x0c\xcb9\xfdQ\xed\xe6\xab\x06b\x03\x7f\xea\xd3Iw\x9b\x98\x01\x18\x1e\xc7{\t\xa8z\x12\xd7hgI4:\xcc\xc1\x9b?\xad\x97\xddd\xd6\xc2\xef\x8a\xe1\xd4w\x1f\xf1\xe4\xf4W\x8a\xc3w\xd1+\x0f\x1eH\xba\xdbD\x0c\x003\x13\x19\xdcX\xcbo\xc5\x0bH\x8e\xb4\x04\xfc\x96\xa3\xb0\xea\xbah\x07=\xc5\xc1Y\x00\xb6v\x9f\x103\xdaJ\x9f\xb4\xd1u"\x06`$\x87w\x80pZ-\xbf\xb5\xbd\x04\xd5*4\x8a\xf2\x03\x80n\xdb\n\xaf\xe3\xe2\xfa\x1b*\xbb\xfc6\xe6\xfb\xb3q\xcc\xfd\xb4\xfd\xc0>\x1b]\'2\xf2\xe11\xde\x89YU~j\xc1Q\xb2A(\x0e\x18A\xb05\xcd\x9e\x16\x85\xa9\xfe\x14\xca\x0b\x06H\x8fA\xf9\xcf\x02\xd4\x01\xa6\x0e\xb0\xea\x00S\'\xa0\xda\x01S\x04\xf1$\xc8\x14@\\\x00\xb8\x00e\xc6\xa0\xbc\xe7\xa0\xf4!8\xdesP\xc5Cp&\x0f\x02\xba`yt\xac\xd1\xee\x9fM\xe7>\xb9\xdb\xca\xb5\x8d\xbb\x83\x91\x1c\xbf\x91\x19?\xa8[\xd0\xf0Xj1\x02\xd1a\xd8Nz\xefr\xccV\xf4\xe9\x0fb\xc2)>\t7\xff\x102\xf9_!\x93\x7f8\xf9c\xcb3\xfe-\xf4\x8a\xfd\x1fJ\xb6\xd3\x19bW\xa7\xe11\xfe\x15"\xca\xf9\'\n<\x01\xa1~R\xa7\xfc\xe1\x93\xc8\xc6\xae\x91w\xf3\xbfA&\xff \xb2c?\x81*\x1d\x8a\xb97\x1e\x02&N\xa1\x8b\x9e\xb3\xe6\x86\xc4z\xa9G\x0b\xbc\xce\x94\x10\xe9\xd1FJ\x05\x9e\x80P\x1b\xcc\x16v\xf5-B\xf96\xb2\x85\x0c\xdfJp\x8a\xfb\x90\x1d\xff)2\xb9\x9f\xc0)>\x19m\xe3\xcc@\x07\xbf\x9f\xce\xdd\xf7u\x9bc\x8c\xf5\xb2\x0f\x8f\xf1\xcd\x00"\x8fn\x8a\x11\xa8\x9e\xb4\xcd\xf5S\xaa\xf3\x8b\xa2\xa6\x0e\xa0}\xf8\xdbh\x1b\xbd\x130S\xf57\xe8\xea\xdf\xd3\x05O\x9cc{\\\xb1\xde\x83\xa1Q>D\x84\x93\xe3h[\x8c@e\x94+\xf8\xd8v\xf7\x89\xc2\x15\x1d4\x96\xe2\x1f7\x0e\x7f\x18\xed\xc3\xff\x84\xb6\xe1o\x83\xf4x\x8d\x8d\xf0$\xd8\xdbN\x17=\x15\xb1[Q\x83(q5<\x9c\xe3K\xc0x0V\xe1)0\x04\x8d\xfc@\xc5EZ\x14\x7f\x8e@\xcdt\xa3t\x1e\xed#\xb7\xa3}\xf8V\x90WE\xf6.3\x90\xe1k\xe9\x82}\x89n\xfaY\x8c8Cj\xd7\xc6-\xfct\xd6ZJ\xdc\xda4\xc0\x08\xdc|\xadS\xa0\xfc4\xeb\xde4\x93\xf2\x03\x80\xd3\x85\xe2\xc0\xfb0z\xe6}(\x0e\\\x07PE\xfb\xdb\x002w\xa4E\xf9\x81\x98n\x0b3\xbb#c8\nBob\x03iqo uo\xfc\x16CM\x1d@\xd7\xf3\x9f\x84[\xf8\xfd\xe2_2\xe6y\x9c4u&\xad{&\xe1\xb5\xc6%\xe4\x8e\xa3\xd1\xd1q\\\x9d\xa4\xf2\x033\xde\x801\xe9\xcdc\x8f|\xcc\x08\xdf\xf6&=o\xfc\x96\xb9\xf8\xf30m\xeb0~\xfa\xb7\x91?\xf1\xb3`\xa7\xe7\xf8/0{\xe8\xf0\xdf\x94&\xe5\x07b2\x00\xc6\x1c_\xe6;)L\x0b\x18\x02\x9e\xa7\xf4\xa9\x99\x025\xdb<\xbf\x06J\xbdo\xc1\xd8\x99?\x82\xd7y\xfe\xcc\x87\xcc\x0c\xc6\x07\xe9\xbc\xa7\x1e\xb5-\xdf|b1\x00\x04\\n{`eC\xa0\xc3\xa5\xaf\xb4\xe8H\xad\x94\xdd{?\x1cSj\x94\x1ehy\xa5\x9f\x0f\xbb}\x98X\xfb\r\x14\x07>\x18|@\xfc\x97t\xc9\xdeo\xda\x96k!"\xbfu\xe3\xe3<\xe8\x19\xc4~\xa2IM\x83\rS\x89\t\xe9O)./\x99\xc9f\xa8\xc6\xc6-\xeez\xce[\xbdeK?Q\xce\xb6,\x0b\x11\xb9\x07\xe03^g{P\x8bQ~\x8b\xeaYo\xd24x\x07\xb3\x03xsdK\xdb\x9b^\xa8\x1a\xbf}\xcb\xc9\xc8\xe1\x91|\x9e\x13.hX\x19\x91\x1b\x00\xc3\xb8\xc2\xf6\xa0*eZ\xe9\xf4\x8c\xd2M\x1b\x85\x18\x0c\xc3\xb4\xa2\xcfR\xf6\xf2\\~v\xbfBsA\xc0\xfa)\x0f\xbf\x1e)\xf0Z\xdb\xb2, [\xb4\x0c\x8d\xf1\x11\x02V\xdb\x1eX\x94P\xf8?\xcb]\xac\xc5tW\x94Z\x00\x00\x06\x8e\x92\x83\xd7\xf4\xad\xa0\xc7m\xcbR&R\x030R\xe0\xb5\\B\xe2e\x8d\x04\xa1Q`F\xce%\\\xb9j\x15\xfd?\xdb\xb2\x00QO\x01\xbc\xc6q\xff\x05\xc1\x06D\xe8\xf6\x19\xf7\x8fL\xf0\xcbm\xcb\x02Dl\x00\x98q\x81\xed\x01\tB\xda!B\x17k\xfc\xdf\xd1Q>\xdd\xb6,\xd1z\x00\x8c\xb3l\x0fH\x10\x1a\x84~\x03<0>\xceV\xe3e\xd1z\x00\xc0\x06\x9b\x83\x11\x84\x86\x82p\xaa\xa7q\x7fxX\xae\x15"3\x00\xcc\x9c%\xc2I\xb6\x06"\x08\r\ta\xebH\x0ew\xd8\xea>2\x030:Y_\xd5_Aha\xae\x1a\x1a\xe3\x8f\xd8\xe882\x03`<q\xff\x05\xa1V\x08\xf8\xfc\xe8(\x9f_\x7fK\xd5\x11\x99\x01P$\x06@\x10\xea\xc0\xd5\xc0\xdd\xc3\xcc\xab\x92\xec4\xba\x18\x80\x04\x00\x05\xa1.\x88p\x12r\xf8n\x92}F\x18\x04\xc4\x89I\n.\x08M\xcaU#9~oR\x9dE\xb7\x0cHX\x99\x94\xd0\x82\xd0\xcc0\xe3\xf3I-\rF\x99\x07 \x06@\x10\xa2ap8\x87\xcf$\xd1Qt\x06\x80\xc5\x00\x08BT\x10p\xfd\xf88o\x8a\xbb\x1f\xf1\x00\x04!\x9d8\x9e\xc6W\xe3\xee$2\x03@\x84\xee\xb8\x85\x15\x84\x96\x82p\xd9\xd0\x18_\x15g\x17\x91\x18\x00f\xeeJ\xe6\x8a\x08BkA\xc0\'\xe2l?\x12\x03\x90\xcf\x8b\xfb/\x081q\xe9P\x8e/\x8a\xab\xf1H\x0c\xc0\xd0\xf8D_r\xd7C\x10Z\x0bb\xfcE\\mG\xe3\x01xPS%\x1f&-gO\x0b\xcb\x92\xf2\xaa\xe8\xc2\\^\x1bW\x05\xa1H\x0c\xc0\xc4Xi\x8c\x00\xf8\xbe\x86\xaf\x8d\x14\xc1l\x00\xe4\x165\x16\xacq]\x1c\xedFb\x00\x8c\x01\x1b\xa0\x04\x00F\x1bx\x9e\x0f#V@\x10\xa2\x83\xf1\x0efv\xa3n6\x1a\x03\xc0\x93\x0c`r\xf6g\xbe\xa7\xe1\xfb:\xa1\xab#T\x85\xd8\xe6\xc6\x83\xd0;:\x1e\xfd\xa1;\x91\x18\x80\x95N\xd6\'3\xd7\x00\x00\x801\x8cR\xc9\x87\xb1~l\xad0\x07\t\x004$\xc6\xe0\xda\xa8\xdb\x8c\xc4\x00\xb8n\x87\x0f\xe2\xc9\xc5\xfe\x7f\xdf7\x12\x1b\x10\x84:!\xc2\x9b\xa3\xce\xb9\x89\xc4\x00\x1c.\x0ei\xc3\x98\\\xea;\xd3\xb1\x01Y)\x10\x84Z\xc9\x8cM\xe0\xb5Q6\x18M*p\xa6\xcbg\xc6P%_\rV\n$6 \x08\xb5`\x0c.\x8f\xb2\xbdH\x0c\xc0 \x06K`~\xb6\xe2AhF\xc9\xd3\xe2\r\x08B\xf5\\\x1eec\x91\x18\x80\xad[\xa9\xa4\x8d9X\xd5\x8f\x98\xa7\xf3\x06\x04A\xa8\x98-\xa3\xa3\xdc\x1bUc\xd1U\x05\xf6\xf5\xd35\xfdN\x1b\x94J>X"\x84\x82P\x11\x1axMTmE\xb7\x1d\x98\xcd\xfez~\xefy\xe2\r\x08B%\x10E7\r\x88\xcc\x00\x1c\x1d\x1f?\xc4\x0c\xaf\x9e6\x8c6(yZ\xbc\x01AX\x02\x06\xce\x8b\xaa\xad\xe8\xce\x05\x98\xa2\x82a~\xa6\xfe\xd11<OCK\xde\x80 ,\x08\x01gF\xd5Vt%\xc1N\\3\xc9\x8c\x8aW\x02\x96Ck\x03\xdf\xd7b\x04\x04\xe1x\xfa\x999\x92\x1a\x1c\x91\x19\x80\xf3\xd6\xa0\x00S_\x1c`>\xcc\x0c\xcf\xf3\xa1}\x89\r\x08\xc2lr9l\x8c\xa2\x9d\x08k\x02\x12\x97\x0c?\x14\xc7`\xb51\xf0<-;\x0c\x05!DG4\r\x88\xb2*0\xc6^\x1a}\xb0\xbc-8j8\xcc\x1b\x10o@\x10\x00&\xac\x89\xa2\x9dH\r@6\xdb\x99\x83\xe6\xc7\xe2\x1bu\xe0\r\x94<\xc9\x1b\x10Z\x1c\x8e\xa6\nw\xa4\x06\x80\xb9{\xc27\xe6\xd1\x04\x06?\xbdR \x08-J\xfa\x0c\xc0\xd6\xadT\xd2\xbe\xff\xeb\xa4\xae\x80\xd6Al@\x9c\x01\xa1\xe5H\xa3\x07\x00\x00\xa3yoG\\q\x80\x05\xaf\x033J\x9e\x0f-\x1b\x8b\x84\xd6"\x9d\x06\x00E\x8c\xc6\x1a\x07X\x00\x02\xa0}\x1dz\x03b\x08\x84\x16 \xa2\x93\xb8"7\x00\xfb\xf7\xf7\x8c\xfbl~\x91\xfc\x15)\xe7\r\xe8\xe9\xf8\x801,\xd3\x03\xa1\xa90\x86\xcb{f\x9c(\xda\x8b\xdc\x00\xbc\xedm\xa4\'&\xa6\xee\x80\xc5\xd2\x93\xcc<\x9dI\xe8y>J\x9e\x0f\xcf\x0f\xea\x0fH.\x81\xd0(0\x87\n\x1fz\xb7\xa5\x92\x0f\xdf\xd70\xda\x80\rOD\xd1G\xe4e\x86\x01\x80|\xdao\x98\x1fQD\xafH\xf6\x92-\x02\x87y\x04&\xacDD\x04"@)\x05\x05\x80\x94T\xc9\x14\xec\xc3\xcc\xa1\xd2\x07\xfb`\x96\x9e\xce\xd2x\x14}F\x1f\x03\x00\xb0q\xe3\xca\xd1\x92\xaf\x7f\x1c\xcbU\x8a\x02f\xb0\xe1 n\xe0k\x94\xc2\xad\xc8R\xa1HH\x12\xc3\x0cc\x18^\xf8\x86\xf7\xc2R\xfa\xc1\xd4u\x99g\x91Lz\r\x00\x11\xe9B\xa1p\x07\x00?\x8e\xf6#\x87\x19&\x9c2\x94\xdd,\xadY\xea\xe7\x0b\x91\xc2\xcc\xd0\xa1\xc2\x97<=}v\x06W\xa2\xf0\xf3PJ\xe5\xa2\x90)\x16\x03\x00\x00\x87sc\x87|\xcd\xbf\x8a\xab\xfd81\x86\xa1\xb5F)\x8c\x1f\x04\x06A<\x04\xa1:\xca\xb1\xa8\xb2\xc2{\x9e\x86\x0e\x15\xbe\xee\xe8\xb4Az=\x00\x00\xb8\xe2\x9cu\xa3\xbe\xe7\xdf\x13W\xfb\x89\xc1e\x830\xe3!\x94<\x1f\xbe6a\xcd\x021\nB\x00#\xdc\xc6\xeeiL\x95\xfc\x99\xba\x16Q(\xfcl\x88@\n/D\xd1Tl\x06\x00\x00\x8a\xbat\xa7a\xe4\xe3\xec\xc3\n\x1cT/*g"\x96<\x7f\xba\xa4\x99\x8d\x95\x86\xb2ki\xf4L\xdf:\x94oz>)v*r\x98\x01\xed\x87/\x06\xcf\x87W\xf2\x83k\xce\x1c\xeb\xe1K\x04\xc0\x00\xfb\xa2h+\x96U\x802\xfe\xc4\xaa\xe7M[\xe9N\xe5\xaa\xf7\xc4\xd9\x8fu\x18`0X3f\xefN\x08V\x17\x08\xe5E\x06"\x82"\xaa\xeah\xaei\x0f\x83hz\xae\xc8\xe1\xe7\xbc\xd0\x94D\x07\xba\xee\xfb\x1aJ)P\xf0\xd3\xe9\xfeCq\x11\x88\x11\xac\x86\xcc\xfe;\xc2\xcf0\xfd\xbb\x99\xbf\xb72\xe5\xa8<\x87\x81\xbb\xb8\x95|)\x08@\xdfJD\x92l\x17\xfb\x18\xf6?3z\xee\xca\xae\xae_\x03\xc8\xc4\xddW\xc31\xfb\xea3\xa0\x88\x02\xe5F\xb0\x1cT\xcf\xcd\xf1\xcb\xae\xe7\xfc.U`\x84\x085,\x7f\x96\x8d\x06f\x19\x8d\xb0-\x10\x81\xc13\x7fo`\xc3Q^\x8e++;\x07\x1f\xda\x16k\x1ar\xd4\xd0\t}\xce@\x14m\xc5\xea\x01\x00\x80\xcb\xabv\xfb\xa6\xf4\x03W\xa9k\xe2\xbf4\r\xc6\xbcgj\xf6\xd4\xa1^\xdd\xe1E\x02\x96l\x18\xba\xdc\xb1\xc6\x8cRO\xe7F,\xd1s\xd9\xd3)\xff\x95\x17\x18\xc4\x02C\x9c\xf6.\x08p\x88\x80\xd0\x08\xa5\x81\xd9\xca\xce\x86a\x90\xfe\xe9\x92\x03\x8a\xc4\xfd\x07\x120\x00\xeb\xd6Qq\xff\xa1\xf1/\xafhk\x7f\xeb\xf4\xcbA\x88\x1d"\xaa,@YV\xea\xe9\xd8\x01P~\xc5\x93\xa2\xe9i\x83\xa2\x99)DUr\xcc\xea\x03\x0c\xf8\xe0\xc0\xf0 4<N\xe8\x8d\xd40=\xaa\x94\x19%\x9f\x19+7\xf0\x8a\x8e!\x8el\xcb}\xec\x06\x00\x00&\x87\xf3\x8ft\xbd,\xfbc"\x15\xe9\xc1\x86BL\x84\xba\xc1f\xe6}\x7f\\l#\xb4\xe63\x0eC\xf5.\x7f9nr\x1c\x14(\xebqq\n\xcc5B\\\xfe4\xfcr9\xd8I4\xa3\xeci\x7f\x9bW\r\x01\x19G\xfd,\xc2\xe6\x92\xe1\x89g\xf2Wwwe\x7f\x98d\x9f\xad\x8c\xd6\x0cc\x92-\x982\xad\xa4J\x85S\x8b\x00\x15Q0q&\x00:\xf7\xb3r\xa0\xb5<\x8difH\x11\xda\x1c\xa7\xaf\xa7\x87F\xa2h/\x11\x0f\x00\x00\x8e\x16\'\x7f\xb1\xa2#\xf3K\xa5\xe8\xd2\xa4\xfalm\x92\x7f\xf5\x95u\x8fC\xc3S\x96\xc0\xcc\xfa\x02\xf1\x02n~\xf9\xefDs\xdb\x99\xb5|\xb9t\xd4\x9d\x83p\x06\x01\xae\x1b\xc9&\xb9\xd4\xa2@{\xa2R\xfe\xa0\xbd\x84\xb8d\xe3\xe0x\xa1\xe0}\x8e\xe7z\x93BL\xd42_\x8f\x9d\xd9s\xf0\xd9\x7fL\xf8G\x1b\xb060\xe1\x9f\xe9e\xcf\x8a\x97\xdcR8\xe6\x88!G\xed\x88\xb2\xbd\xc4\x0c\x00\x00\x1cya\xf8\x01\xad\xcd\x1dI\xf6\xd9\xaa(E\xb3\xe2\xf5\xad\x81j\x81]\x9d\x04\xec\x88\xb8\xbdd\xd9w\xe0\xd8\xc6\xee\x15\xab\x1e" \xb2#\x8e\x85\x85\xf1|\xdd|A\xb0E "\xb8n\xa2\xef\xb3\xc4QJ\xf9\x83}\xaa\x87\x88"\xcb\xaeM\xfc\x8amX\xdb\xff\x84\xef\x9b\xbfM\xba\xdfVd\xb1Y@\x8arZ"\x1a(\x9a^\xf9\x01\xc0Qt_\x94\xca\x0fX0\x00Dd\x0e\r\x17\xbfl\x0c\xefL\xba\xefVc\xb1\xb4\x8b4\x86\x07j\x85\x01\xb8Ns\x07\xfe\x00\x84\x1b\x80\xe8\xb6\xc8\x9b\xb55\x9e\xa7\x9f\xcd\xbf\xb1\xb3#{\xb7M\x19\x9a\x1d\xc3\xdc\xdc\')\x85Q\xffVx\x80\x94R\xc5\xd0\xfd\x9f\x8a\xb4][\x03:\xf8\xd4\xd1\x9f\x18\x1fw\xd9\xea\xbf\x15HK\xbam\\8\xe1f\xa7f\x87\x19p\x1c\xfaa\xd4\xca\x0fX4\x00W\\\xb1\xae8:9\xf9\xe7l\xf0\xa2-\x19Z\x81E7\xfc4\xb0\xe60\x829\x7f+D\xfd\x81\xe9\x94\xeco\xc6\xd2\xb6\xed\xc1=\xf9l\xfe\xcd]\x1d\xd9;)\xa22\xc7\xc2\\\x82CU\x9bh\x1a@\xc1\x9c\xbf\xc9\x9d\x9b98\x8ezj\xb0\xcf\x89\xe44\xe0\xf9X\x0f\x9d>\xb1\xf3\x85{=_\xff\x9dm9\x9a\x15\n\xb7\x187\x03D\x84\x8c\xdbZ\xca\x1f\x18<\xf5\xe9\x18\x9b\xb7\xcf#\x8f\xbc0\xb0\xe6\x94\x81\xbb\x1dE\x17\xdb\x96\xa5\x191\xda4\xfc\xd1i\xcaQpZ\xc4\xe5\x9f3n\xa5\x8e\x0c\xf6\xa9\x93\x88H\xc7\xd2\xbe\xed\x01\x02\xc0\xf9\xe7\x9fxllj\xeaC\xc6\xe0\xa8mY\x9a\x11\xe5,~\x9b\x1b\xc1,8-\xaa\xfc\x00\xe0\xba\xea\xe6\xb8\x94\x1fH\x89\x07P\xe6\xe0\xc1\xc9k\xb2\x1d\x99\xdb[\xa9n@\xb96|\xb9\xf8h\\\xee\xad6\x06\xdc`\xa1\x80r\x81\x92\x05\xf75\x10\x81B\xeb\xe5\xb8\x94\xce\xbd\x0fu\xa2\x1c54\xd8\xabN&\xa2bl}\xd8\x1e\xe4l\x9e~\xba\xe3n_\xfb7\xd9\x96#\t\x0c\x1b\xf8\xbe\x81\xf6g6\xbd\xc4\xf9\x0c;*U\xb7zYH\x11\x1cG-\xae\xd8\xcc(\xff\xe3\xfb\x06\x9eo`t#\xf83\x95^\x00\x82\x82\xfaT\x9c\xca\x0f\xa4\xcc\x03\x00\x80\x87\x1e:\xd4q\xcai\x83\x7f\x9d\xc9:\xd7\xdb\x96%\x0elF\xe5\x1b\xc1\x0b`\x00\xca\xa1\xa0tX\r\x90"\xb8Nc\x19\xbb\xe3\xae\x01\x03\xae\xeb\xfcn\xb0O\x9d\x1bw_\xa93\x00\x00\xb0w\xefK+W\xf4t\xff\xbd\xeb\xa8km\xcb\x12%\xc60\xb41\xd6&\xde\xccA\xb9\xf0\xb4\xb2\xa4\xcb_U;\x14L\x0b\xd2\xf9x//\xbf"v\xb3\xce\xb6\xfe\x95\xb4+\xee\xbeRi*7n\x1c\x1c?\xfc\xdc\xd0G|\xdf\xdck[\x96\xa8\x98V>\x8b^*\x11@)\xcd\xb6 g\x19\x97\xbf\n\x82\x13y\x1aw:\x90q\x9d\x7fHB\xf9\x81\x94z\x00e\x1e\x7f\xfc\xc8\t}\xab{\xbf\xef(\xba\xc8\xb6,\xf5\x92\xa6\xa3\xc5|\xcb\x86h\x0e\x048\x11\xbc\xf5\x17B\x85q\x84FB9jd\xb0W\x9d\x12\xf5\xae\xbfE\xfb\xb3=\xe0\xa5\xd8\xb6\xed\x84#\x93\xb9\xf1\xb7\x1b\xc3\xbf\xb7-K=0\xd2\xf5FJ\xcb\x92\x1a)\xc0\x8d\xe8\xad\xbf\x10\xa6\\\xa4\xb0APD\xc8*\xf5\xf6\xa4\x94\x1fH\xb9\x01\x00\x80\xf5\xeb\xfb\x9f\xf3\x8a\x93o5\xcc\xbf\xb3-K\xadh\x1do\x84\xbfZ\x88\x08\xca\xb1W1\x88(\x0c\xf4\xc5\xbd2\xc1\xdc8+\x03Dp]\xe7\xf3==\xf4\xd3D\xbb\xb5=\xeeJ\xd9\xb7\xef\xd8I+{\xba\xbf\xd3\x88EE=\xcfG\x1a/\xb5\x8dU\x01\xaa#\xc2_S\x7f\rP(\x94\x01d\\\xe77\xfd=t!\x11%j\xb1R\xef\x01\x949\xeb\xac\x81\xe7\xc7\x86\x8bo\xd1\x9ei\xc0-\xc4\xe9S~ \xdcN\x9b\x90hDaF_\xc2\xaeP#\xbc\xff3\x8e3\xdc\xe6\xd2\x1b\x92V~\xa0\x81\x0c\x00\x00l\xda\xd4=4\x99\x9fx\xaf\xef\xeb\xaf\xda\x96\xa5R\xd2^~\xcb\tk\xf8\xc7\x06\xcdN\xea\xb10\xc0\x94\xdf\x00"*\xb8\x8a\xfe\xdd\xca\x95d%\r\xbe\xa1\x0c\x00\x00\xac_\xdf\x9f\xf3\x8am\x1f\xf1|s\x13\x1a\xc1\xc0\x87\xc7R\xa5\x16\x8a/(Ha\xdb6\x83\x8e\x8c\xf4\xee\x86$"O9\xce\xebzz\xe8\x11[24\x9c\x01\x00\x82\xf3\x06\x9f\xdc\x9b\xfd\xac\xe7\xeb\x1b\x98\xe1\xd9\x96g)\xca\x87c\xa6\x19"\x82\xe3D($\x01N\x84\xeb\xfau\x8a\x92\xce\t\x18\x91Q\xcay\xeb`/\xed\xb0*\x86\xed\xebP\x0f\xccL\x07\x0fO]\xd5\xa6\x9c\xaf\x91\xc2\x1a\xdb\xf2,\x841\x9c\xea\xec\xbb\xd9\xd4\x9d@Sv\xf7Sf\xf12\x99\xf4\x05\x013\xae\xfb\xfe\xfe^\xfa\xbam9\x1a\xd2\x03(CD\xbcvM\xfb\xbd\xa3\x93\x13\x17\xf9\x9aw\xd8\x96\xa7\xd1\t<\x81\xea\x1f\tF\x18\xddW\xc9\x07\xf9\x1a\x8e\xa0\x84\xf9\riP~\xa0\xc1\r@\x99M\xebz\x9f9\xfc\xdc\xb1\xab=\xdf\xdcd\x18\x91\x17Nl%\xca\xd1\xfaJ}\xc3r2\x8f\xd3\x02\x07sF\x80OD\xd7\x0c\xf4:_\xb2-H\x99\xa60\x00\x00p\xfe\xf9\'N~\xed\x96\xecg&\nS\xaf7\x86\x0f\xda\x96\xa7\x91\xa1\xa0\x0c\xd5\x92F\x80T\xb9P\x87\xa5\xe8~\x83\xc1\xa0\xbc\xe3\xbaW\x9e\xd0\xef\xfe\xb3mYf\xd3\x94\xb7\xee\xe9\xa7\x8f\x9c\xe0v\xf4|1\xeb\xaa\xb7\xd9\x96\xa5\x91b\x00\x0b1?Y(\xaa\x1d{Ib=\x06@4\x9cms^\xd5\xb7\x92Rw\x18N\xe3\xdc\xc5*af\xe7\xe9\xe7\'_\xdb\x91\xc9|N)\xdabK\x8eF7\x00@\x10\x1c4\x86A\x8a\x1a\xf2\xac\x01\x9b\x06\x80I\xfd\xae\xbbC]\xdd\xd5E\xa9,\x7f\xdf4S\x80\xf9\x10\x91>\xe3\xe4\xae\x1f\x1d;2y\xa9\xe7\xfb\x7fi\x80Q\xdb25$a*m[\x9b\xdbpU\x85,\xc3\x8eR\x7f\xfb\xb2~\xf5\x8a\xb4*?\xd0\xc4\x06\xa0\xcc\xd9g\xf7\x8c|\xed\x96\xf6\x9b\xc7\'\n\x7f\xe0ks;[\xd8\x01\x93\xeaD\xa0\xc5\xa0\xa0\x98\xa8\xeb8\xd3.\xbf\xeb*(G\xa56\xb1&-\x10h\xcc\xcd\xb8W\x0e\xf6;\x1f\x89\xb3\xa0g4\xb2\xb6\x10;w\xee\xccv\xadZ\xfb\xea\xb6l\xf6\x0bIN\x0b</\xd5\xcf\xc0\\\x08Pj\xe9*\xbc\xcc\x0cm\x18\x9c\x92\xfa\x06\xcb\x0c\x07n\x82S\x00r\xd4o\xbb\xb2\xea\xea\x15+\xe8\xb0\xed\xb1W$\xafm\x01l\xb0\x7f?\xb7\xb5wy\xefQ.\xfe\xcc!\xda\x14w\x7f\xbe\xafS\xef\x05Pp\xfalUi\xbb\xe5\xc4!N\xf1\xe0H\x05\x9eK\xecn\x0b\xd1\x90\xeb\xd2\x8d\xfd\xab\xd4-D\xd40A\x9f\x964\x00e\xf6\xef\xe7\xb6\x8en\xefm\n\xf8\xa8R\xb4=\xae~\xb4o`\xd2\xa8$\xe1\xdb>\xd8\x0fT\xfb\xa3`\xbb\xd6\xe1R8\x8a\x96<\x17\xa1n\x08\x9e\xab\xd4-\xfd\xbd\xea\x13D4n{\xbc\xd5\x8b/`\xe7N\xcev\x0f\x94\xde\xe2*\xfa\xa8"zE\xd4\xed\xa7m%\xa0\xfc\xb6W\x11\'\xef\x18\x13\xac\x16\xa4\xc9#p\\\x07q\xecEb@\x83\xf9\xce\x8e\x95\x99\x8f\xf7t\xd0\x01\xdb\xe3\xac\x151\x00\xb3\xb8\xfdvv.\xbex\xea\nr\xd5\xfb\x14\xd1\x1b@X\x19U\xdb\xbeo\xec*\x06\x01\xa4\x14\x1cB"k\xf8\xbef\xb0\xb1k\xf4\xe2(\x11\xce\x0c\xa3\x14}\x9f2\xfe\'V\xafj\xdfou\x80\x11 \x06`\x11\x0e\x1c\xe0\xf6\xb6\xce\xd25\xa4\xd4;\x99\xf1jEh\xab\xa7=c\x82\xf3\x00\x92^F\xafen\x1f%6\xbd\x027\xe3D\xf6\x803\x83\x95\xa2\xbb\x15;\x1f\x1f\x1c\xa4}\x89\x0f&&\xc4\x00T\xc0\xe1q^m\x8a\xfe\xb5\xc6\xf0\x1f;\x8a.\xa0\x1a\x97O\xb5I\xe8\xf4\x9aY\xbb\xf2\xd2\x92\xb1\xc7\x86\xa1\x81\xc0+H\xe0\x128\x8e\x82\xaa\xd3\xe81\x00Rt@\x11}{E\xbb\xfajg\'=\x97\xc8\xc5J\x90t<\x1d\r\xc4\xe1q^\x8d\x82\xbeB\x1bs\x89"\\\xc0\xa0mJ\xa1\xa3\xd2\xdf\xc7\xe9\t\x04\xf5\xf6\xd2\x9f\x9b\xcf\xcc0\x1c\xfc\x9b\x99#7\x08\xae\xa3@\xb5*?\x01\x0e\xd4\x189\xf8\xbe6\xea\xff\x9c\xd0O\x0f\xd9\xbe^q\x92\xf2G%\xfd\x1c:\xc4\x1dJM]\x02\x97.&\xa8W\x82\xf8,E\xb4n\xa9\xdf\x18c\xa0\x99\xc1\xba\xf6b!D\x04\xa8 v\xaf\x12\x9a\xd7\xc7\x891A\x86\xd6t\xdaq-\x8d0\x90\xc9V\xbf\xe6\xaf@/2\xf0\xb0\x9b\xa1\x07\x1d\xa8\x1d\xabV\xe1wiO\xe0\x89\x8a\xc6~jR\xc8\xed\xb7\xb3\xb3\xfe\x15\xa3+{3m\x9b\x1c\xd7\xdd\xec:\xbc\x81Y\xad\'\xe63\x00ZGj&\xb0h\x8c\t\x13j\x966\x04\x8c\xa0f|\x10\xb9\x0f>kt\x85_\x0e\x0eK\xa9\x19\xcc\xf2\x1088c\x81y\xee\x83K\x8a**D\xc2\x00@t\x10\xcc{\x00\xect\x1dzT\xb1\xf3\xcb\xfe\xfe\xe6s\xed+\xa5\xb9\x9f\xa2\x94q\xd3M\xacn\xb8ade\xa9\xd4\xd1g\x1c\xa7\xcf\x10\xf5\xc0\x98>G\xd3`\tzuV9k\xa1\xd0\xa1HM2\xcc\x04\x88FA(\xc0\xf0\x846\xc8\x83x\xd2\x18\x94l\x8f#\r\xb4g\xd4\xe9\x04\x95%R\xf9\x92\xaf\xf7\x13|\x87\x88\x9c\x92\x069\xa1#\x11l\t\x83q\x1c\xd7\xb4\x81s\xbd\xbd\xee#q\x9f\xb6+\x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82 \x08\x82\xb0$\xff\x1fL\xd6\xad\xfe\xe1\x95\xed\xc3\x00\x00\x00\x00IEND\xaeB`\x82' qt_resource_name = b'\x00\x03\x00\x00x\x83\x00q\x00r\x00c\x00\x0b\x0e>>\xdf\x00w\x00e\x00a\x00t\x00h\x00e\x00r\x00.\x00i\x00c\x00o' qt_resource_struct_v1 = b'\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00' qt_resource_struct_v2 = b'\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01ya\x1cp\xd5' qt_version = [int(v) for v in QtCore.qVersion().split('.')] if qt_version < [5, 8, 0]: rcc_version = 1 qt_resource_struct = qt_resource_struct_v1 else: rcc_version = 2 qt_resource_struct = qt_resource_struct_v2 def qInitResources(): QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) def qCleanupResources(): QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) qInitResources()
ui.py
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(500, 300) MainWindow.setMinimumSize(QtCore.QSize(200, 200)) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/qrc/weather.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout.setObjectName("horizontalLayout") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.comboBox = QtWidgets.QComboBox(self.centralwidget) font = QtGui.QFont() font.setFamily("Microsoft YaHei ") font.setPointSize(11) self.comboBox.setFont(font) self.comboBox.setEditable(False) self.comboBox.setCurrentText("") self.comboBox.setObjectName("comboBox") self.gridLayout.addWidget(self.comboBox, 0, 0, 1, 1) self.textEdit = QtWidgets.QTextEdit(self.centralwidget) font = QtGui.QFont() font.setFamily("Microsoft YaHei ") font.setPointSize(11) self.textEdit.setFont(font) self.textEdit.setReadOnly(True) self.textEdit.setObjectName("textEdit") self.gridLayout.addWidget(self.textEdit, 1, 0, 1, 1) self.horizontalLayout.addLayout(self.gridLayout) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Query the weather of provincial capital cities")) import qrc_rc
main.py
import sys import requests from PyQt5 import QtCore from PyQt5.QtWidgets import QMainWindow, QApplication from ui import Ui_MainWindow cities = { 'Macao': 101330101, 'Beijing': 101010100, 'Changchun': 101060101, 'Changsha': 101250101, 'Chengdu': 101270101, 'Chongqing': 101040100, 'Fuzhou': 101230101, 'Guangzhou': 101280101, 'Guiyang': 101260101, 'Harbin': 101050101, 'Haikou': 101310101, 'Hangzhou': 101210101, 'Hefei': 101220101, 'Hohhot': 101080101, 'Jinan': 101120101, 'Kunming': 101290101, 'Lhasa': 101140101, 'Lanzhou': 101160101, 'Nanchang': 101240101, 'Nanjing': 101190101, 'Nanning': 101300101, 'Shanghai': 101020100, 'Shenyang': 101070101, 'Shijiazhuang': 101090101, 'Taipei': 101340101, 'Taiyuan': 101100101, 'Tianjin': 101030100, 'Urumqi': 101130101, 'Wuhan': 101200101, 'Xi'an': 101110101, 'Xining': 101150101, 'Hong Kong': 101320101, 'Yinchuan': 101170101, 'Zhengzhou': 101180101 } def get_weather(city): """Get weather""" url = 'http://wthrcdn.etouch.cn/weather_mini?citykey={}'.format(city) res = requests.get(url) data = res.json() if data['status'] == 1002: return data['desc'] data = data['data'] result = '{}weather forecast\n'.format(data['city']) result += 'Real time temperature:{}℃\n'.format(data['wendu']) for forecast in data['forecast']: result += '{}: '.format(forecast['date']) weather = '{} ~ {}'.format(forecast['low'].replace('low temperature ', '').replace('℃', ''), forecast['high'].replace('high temperature ', '')) result += '{} {}\n'.format(weather, forecast['type']) result += '{}'.format(data['ganmao']) return result class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): super(MainWindow, self).__init__() self.setupUi(self) # Set the drop-down box of provincial capital city and bind events _translate = QtCore.QCoreApplication.translate for city in cities.keys(): self.comboBox.addItem(city) self.set_weather() self.comboBox.currentTextChanged.connect(self.set_weather) def set_weather(self): city = self.comboBox.currentText() weather = get_weather(cities[city]) self.textEdit.setText(weather) if __name__ == '__main__': app = QApplication(sys.argv) win = MainWindow() win.show() sys.exit(app.exec_())
effect
pack
pyinstaller -F -w -i weather.ico main.py
TODO: package OpenCV
1.jpg
Show a picture
import cv2 image = cv2.imread('1.jpg') cv2.imshow('1', image) cv2.waitKey(0) cv2.destroyAllWindows()
TODO: package TensorFlow
The code is shown in: Call ImageNet pre training model for image classification
effect
Packaging (my attempt failed)
pyinstaller -F main.py --additional-hooks-dir=hooks pyinstaller -F -w main.py --additional-hooks-dir=hooks
Trouble with Tensorflow 2.0 · Issue #4400
2019.11.1: Currently, the highest TensorFlow version that PyInstaller can bundle is TensorFlow 1.14. I have to keep my development under this version of TensorFlow. Hopefully PyInstaller can bundle TensorFlow >= 1.15.
TODO: function variable command
pallets/click: Python composable command line interface toolkit
Pit encountered
1. Error ModuleNotFountError: No module named 'requests'
Don't use the - w parameter at first. What's wrong with reading the newspaper
pip install requests --upgrade
2. This application failed to start because no Qt platform plugin could be initialized Reinstalling the application may fix this problem.
Solution 1: use UPX package to report this error, and the UPX can be removed
Solution 2: search for platforms in C: \ users \ administrator \ appdata \ local \ programs \ Python \ Python 36 \ lib \ site packages and copy platforms / qwindows DLL is placed in the same folder, that is, there is a qwindows.dll in the platforms folder dll. The executable program of this scheme takes up less space, but there is no icon. I don't know how to solve it.
reference
- PyInstaller GitHub
- PyInstaller Documentation
- UPX official website
- python-fire: Python Fire is a library for automatically generating command line interfaces (CLIs) from absolutely any Python object.
- Python packaged into exe ultimate
- Weather query application
- A packaging tool officially recommended by Python
- Python package exe program pit avoidance Guide
- Python GUI Programming Cookbook - Third Edition
- Understand How Tkinter pack Geometry Manager Works by Examples
- Layout management in Tkinter - place, pack, grid managers
- PyQt5 Documentation
- Packaging PyQt5 & PySide2 applications for Windows, with PyInstaller
- PyInstaller packing list file exe precautions
- pyinstaller ModuleNotFoundError - Stack Overflow