Python is packaged as exe -- pyinstaller

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

fire

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

  1. PyInstaller GitHub
  2. PyInstaller Documentation
  3. UPX official website
  4. python-fire: Python Fire is a library for automatically generating command line interfaces (CLIs) from absolutely any Python object.
  5. Python packaged into exe ultimate
  6. Weather query application
  7. A packaging tool officially recommended by Python
  8. Python package exe program pit avoidance Guide
  9. Python GUI Programming Cookbook - Third Edition
  10. Understand How Tkinter pack Geometry Manager Works by Examples
  11. Layout management in Tkinter - place, pack, grid managers
  12. PyQt5 Documentation
  13. Packaging PyQt5 & PySide2 applications for Windows, with PyInstaller
  14. PyInstaller packing list file exe precautions
  15. pyinstaller ModuleNotFoundError - Stack Overflow

Keywords: Python TensorFlow pyqt Tkinter pyinstaller

Added by berry05 on Sat, 29 Jan 2022 04:31:06 +0200