From 993357e5ed20cf1713370857088eecc972910e83 Mon Sep 17 00:00:00 2001 From: CharlesPikachu <1159254961@qq.com> Date: Sat, 26 Feb 2022 14:20:36 +0800 Subject: [PATCH] add ukrainemap --- README.md | 1 + docs/Changelog.md | 4 +- docs/Quickstart.md | 24 +++ pytools/__init__.py | 2 +- pytools/modules/__init__.py | 1 + pytools/modules/ukrainemap/__init__.py | 2 + pytools/modules/ukrainemap/icon.png | Bin 0 -> 207 bytes .../ukrainemap/resources/Cherkasy.json | 1 + .../ukrainemap/resources/Chernihiv.json | 1 + .../ukrainemap/resources/Chernivtsi.json | 1 + .../modules/ukrainemap/resources/Crimea.json | 1 + .../ukrainemap/resources/Dnipropetrovsk.json | 1 + .../modules/ukrainemap/resources/Donetsk.json | 1 + .../ukrainemap/resources/Ivano-Frankivsk.json | 1 + .../modules/ukrainemap/resources/Kharkiv.json | 1 + .../modules/ukrainemap/resources/Kherson.json | 1 + .../ukrainemap/resources/Khmelnytskyy.json | 1 + .../modules/ukrainemap/resources/Kiev.json | 1 + .../ukrainemap/resources/Kirovohrad.json | 1 + .../modules/ukrainemap/resources/Luhansk.json | 1 + .../modules/ukrainemap/resources/Lviv.json | 1 + .../ukrainemap/resources/Mykolayiv.json | 1 + .../modules/ukrainemap/resources/Odessa.json | 1 + .../modules/ukrainemap/resources/Poltava.json | 1 + .../modules/ukrainemap/resources/Rivne.json | 1 + .../modules/ukrainemap/resources/Sumy.json | 1 + .../ukrainemap/resources/Ternopil.json | 1 + .../modules/ukrainemap/resources/Ukraine.json | 28 ++++ .../ukrainemap/resources/Vinnytsya.json | 1 + .../modules/ukrainemap/resources/Volyn.json | 1 + .../ukrainemap/resources/Zakarpattia.json | 1 + .../ukrainemap/resources/Zaporizhzhya.json | 1 + .../ukrainemap/resources/Zhytomyr.json | 1 + pytools/modules/ukrainemap/ukrainemap.py | 143 ++++++++++++++++++ pytools/pytools.py | 3 +- 35 files changed, 230 insertions(+), 3 deletions(-) create mode 100644 pytools/modules/ukrainemap/__init__.py create mode 100644 pytools/modules/ukrainemap/icon.png create mode 100644 pytools/modules/ukrainemap/resources/Cherkasy.json create mode 100644 pytools/modules/ukrainemap/resources/Chernihiv.json create mode 100644 pytools/modules/ukrainemap/resources/Chernivtsi.json create mode 100644 pytools/modules/ukrainemap/resources/Crimea.json create mode 100644 pytools/modules/ukrainemap/resources/Dnipropetrovsk.json create mode 100644 pytools/modules/ukrainemap/resources/Donetsk.json create mode 100644 pytools/modules/ukrainemap/resources/Ivano-Frankivsk.json create mode 100644 pytools/modules/ukrainemap/resources/Kharkiv.json create mode 100644 pytools/modules/ukrainemap/resources/Kherson.json create mode 100644 pytools/modules/ukrainemap/resources/Khmelnytskyy.json create mode 100644 pytools/modules/ukrainemap/resources/Kiev.json create mode 100644 pytools/modules/ukrainemap/resources/Kirovohrad.json create mode 100644 pytools/modules/ukrainemap/resources/Luhansk.json create mode 100644 pytools/modules/ukrainemap/resources/Lviv.json create mode 100644 pytools/modules/ukrainemap/resources/Mykolayiv.json create mode 100644 pytools/modules/ukrainemap/resources/Odessa.json create mode 100644 pytools/modules/ukrainemap/resources/Poltava.json create mode 100644 pytools/modules/ukrainemap/resources/Rivne.json create mode 100644 pytools/modules/ukrainemap/resources/Sumy.json create mode 100644 pytools/modules/ukrainemap/resources/Ternopil.json create mode 100644 pytools/modules/ukrainemap/resources/Ukraine.json create mode 100644 pytools/modules/ukrainemap/resources/Vinnytsya.json create mode 100644 pytools/modules/ukrainemap/resources/Volyn.json create mode 100644 pytools/modules/ukrainemap/resources/Zakarpattia.json create mode 100644 pytools/modules/ukrainemap/resources/Zaporizhzhya.json create mode 100644 pytools/modules/ukrainemap/resources/Zhytomyr.json create mode 100644 pytools/modules/ukrainemap/ukrainemap.py diff --git a/README.md b/README.md index bb13b0b..079728c 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ You can star this repository to keep track of the project if it's helpful for yo | controlpcbyemail | [click](https://mp.weixin.qq.com/s/KnG-mncegaB35v5THAUJXQ) | [click](./pytools/modules/controlpcbyemail) | 邮件控制电脑 | | playfireworks | [click](https://mp.weixin.qq.com/s/wzz_7gKIt7iU-7kM_9o_pw) | [click](./pytools/modules/playfireworks) | 放烟花特效 | | arxivhelper | [click](https://mp.weixin.qq.com/s/XypPxlWmzbRoEEEhusEXJA) | [click](./pytools/modules/arxivhelper) | Arxiv小助手 | +| ukrainemap | [click]() | [click](./pytools/modules/ukrainemap) | 乌克兰地图查询系统 | # Install diff --git a/docs/Changelog.md b/docs/Changelog.md index 1222519..049f26f 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -12,4 +12,6 @@ - 2022-02-13: 完成v0.1.10, 升级桌面宠物,支持冰墩墩版本。 -- 2022-02-14: 完成v0.1.11, 修复Linux上无法运行问题和pyinstaller打包的问题。 \ No newline at end of file +- 2022-02-14: 完成v0.1.11, 修复Linux上无法运行问题和pyinstaller打包的问题。 + +- 2022-02-15: 完成v0.1.12, 添加乌克兰地图查询系统。 \ No newline at end of file diff --git a/docs/Quickstart.md b/docs/Quickstart.md index 59af68f..f97aaf4 100644 --- a/docs/Quickstart.md +++ b/docs/Quickstart.md @@ -756,6 +756,30 @@ tool_client.execute('arxivhelper', config={'time_interval': 3600*5, 'server_key' } ``` +#### 乌克兰地图查询系统 +1.公众号文章链接 + +[点击查看]() + +2.功能介绍 + +简单的乌克兰地图查询系统。 + +3.调用示例代码 +```python +from pytools import pytools + +tool_client = pytools.pytools() +tool_client.execute('ukrainemap') +``` + +4.config中支持的参数 +``` +{ + title: 软件显示的标题, 默认值"乌克兰地图查询系统 —— Charles的皮卡丘", +} +``` + ## 随机运行一个小程序 写如下代码,保存并运行即可: diff --git a/pytools/__init__.py b/pytools/__init__.py index e7bd709..5eebe78 100644 --- a/pytools/__init__.py +++ b/pytools/__init__.py @@ -5,7 +5,7 @@ '''url''' __url__ = 'https://github.com/CharlesPikachu/pytools' '''version''' -__version__ = '0.1.11' +__version__ = '0.1.12' '''author''' __author__ = 'Charles' '''email''' diff --git a/pytools/modules/__init__.py b/pytools/modules/__init__.py index cbf8aef..ea3a50c 100644 --- a/pytools/modules/__init__.py +++ b/pytools/modules/__init__.py @@ -2,6 +2,7 @@ from .timer import Timer from .clock import Clock from .runcat import RunCat +from .ukrainemap import UkraineMap from .desktoppet import DesktopPet from .translator import Translator from .calculator import Calculator diff --git a/pytools/modules/ukrainemap/__init__.py b/pytools/modules/ukrainemap/__init__.py new file mode 100644 index 0000000..b61f863 --- /dev/null +++ b/pytools/modules/ukrainemap/__init__.py @@ -0,0 +1,2 @@ +'''初始化''' +from .ukrainemap import UkraineMap \ No newline at end of file diff --git a/pytools/modules/ukrainemap/icon.png b/pytools/modules/ukrainemap/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0db5797c36724563245f198a0407c4c6c143d1cc GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^|ABZF2Q!ciotn7^NU;U@gt#(9@BV+4A&H^e5-8H* z>EaktG3V`hLq-M$jspsB<8O(?HM5-oN?`(> 0) & 1) << (7 - i)) + palette[j * 3 + 1] |= (((lab >> 1) & 1) << (7 - i)) + palette[j * 3 + 2] |= (((lab >> 2) & 1) << (7 - i)) + i += 1 + lab >>= 3 + palette = np.array(palette).reshape(-1, 3) + palette = palette.tolist() + return palette + '''rgb转16进制''' + def rgb2hex(self, rgb): + color = '#' + for num in rgb: + color += str(hex(num))[-2:].replace('x', '0').upper() + return color + '''绘制''' + def draw(self): + state_name_cn = '-'.join(self.map_items.currentText().split('-')[1:]) + if state_name_cn == '基础': + self.drawukraine() + else: + self.drawstate(self.cn2en_states[state_name_cn], self.cn2color_states[state_name_cn]) + '''画乌克兰''' + def drawukraine(self, show_label_image=True): + info = json.load(open(os.path.join(self.mapdir, 'Ukraine.json'), 'r', encoding='utf-8')) + features = info['features'] + for feature in features: + try: + state_cn = feature['properties']['name:zh'] + except: + if feature['properties']['name:en'] == 'Autonomous Republic of Crimea': + state_cn = '克里米亚' + geometry = feature['geometry'] + x_list, y_list = [], [] + for coordinate in geometry['coordinates'][-1]: + if not coordinate: continue + x_list.append(coordinate[0]) + y_list.append(coordinate[1]) + plt.plot(x_list, y_list, color='black') + if show_label_image: + plt.savefig(os.path.join(self.rootdir, 'ukraine.png')) + self.showLabelImage(os.path.join(self.rootdir, 'ukraine.png')) + '''画乌克兰的某个州''' + def drawstate(self, state_name='Kiev', color=None): + assert state_name in self.en2cn_states + self.drawukraine(show_label_image=False) + info = json.load(open(os.path.join(self.mapdir, state_name+'.json'), 'r', encoding='utf-8')) + geometry = info['geometry'] + x_list, y_list = [], [] + for coordinate in geometry['coordinates'][-1]: + if not coordinate: continue + x_list.append(coordinate[0]) + y_list.append(coordinate[1]) + plt.plot(x_list, y_list, color=color) + plt.text(x_list[0], y_list[0], self.en2cn_states[state_name], size=10, color=color) + plt.savefig(os.path.join(self.rootdir, f'{state_name}.png')) + self.showLabelImage(os.path.join(self.rootdir, f'{state_name}.png')) \ No newline at end of file diff --git a/pytools/pytools.py b/pytools/pytools.py index 7304c79..488e25c 100644 --- a/pytools/pytools.py +++ b/pytools/pytools.py @@ -37,7 +37,7 @@ def execute(self, tool_type=None, config={}): qt_tools = [ 'newyearcardgenerator', 'luxunsentencesquery', 'artsigngenerator', 'genderpredictor', 'musicplayer', 'qrcodegenerator', 'videoplayer', 'trumptweetsgenerator', 'coupletgenerator', 'idcardquery', 'idiomsolitaire', 'inquiryexpress', 'succulentquery', 'translator', - 'desktoppet', 'computersinger', 'hubbleseeonbirthday' + 'desktoppet', 'computersinger', 'hubbleseeonbirthday', 'ukrainemap' ] if tool_type in qt_tools: app = QApplication(sys.argv) @@ -53,6 +53,7 @@ def initialize(self): 'timer': Timer, 'clock': Clock, 'runcat': RunCat, + 'ukrainemap': UkraineMap, 'desktoppet': DesktopPet, 'translator': Translator, 'calculator': Calculator,