From 7816b289a300f5017adfaf5a19957a6c1276aba3 Mon Sep 17 00:00:00 2001 From: suti7yk5032 Date: Sun, 12 May 2024 21:47:43 +0900 Subject: [PATCH] 1st --- .gitignore | 2 + copyright.txt | 57 ++++++ docs/copyright.txt | 57 ++++++ en.py | 161 ++++++++++++++++ jp.py | 463 +++++++++++++++++++++++++++++++++++++++++++++ jp.spec | 51 +++++ lib/logo.ico | Bin 0 -> 13238 bytes lib/logo.png | Bin 0 -> 3417 bytes pyinstaller.txt | 5 + 9 files changed, 796 insertions(+) create mode 100644 .gitignore create mode 100644 copyright.txt create mode 100644 docs/copyright.txt create mode 100644 en.py create mode 100644 jp.py create mode 100644 jp.spec create mode 100644 lib/logo.ico create mode 100644 lib/logo.png create mode 100644 pyinstaller.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..42b415e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/venv/ +/*.lnk \ No newline at end of file diff --git a/copyright.txt b/copyright.txt new file mode 100644 index 0000000..acac6aa --- /dev/null +++ b/copyright.txt @@ -0,0 +1,57 @@ +pillow +The Python Imaging Library (PIL) is + + Copyright © 1997-2011 by Secret Labs AB + Copyright © 1995-2011 by Fredrik Lundh + +Pillow is the friendly PIL fork. It is + + Copyright © 2010-2023 by Jeffrey A. Clark (Alex) and contributors. + +Like PIL, Pillow is licensed under the open source HPND License: + +By obtaining, using, and/or copying this software and/or its associated +documentation, you agree that you have read, understood, and will comply +with the following terms and conditions: + +Permission to use, copy, modify and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appears in all copies, and that +both that copyright notice and this permission notice appear in supporting +documentation, and that the name of Secret Labs AB or the author not be +used in advertising or publicity pertaining to distribution of the software +without specific, written prior permission. + +SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +darkdetect +Copyright (c) 2019, Alberto Sottile +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of "darkdetect" nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL "Alberto Sottile" BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/docs/copyright.txt b/docs/copyright.txt new file mode 100644 index 0000000..acac6aa --- /dev/null +++ b/docs/copyright.txt @@ -0,0 +1,57 @@ +pillow +The Python Imaging Library (PIL) is + + Copyright © 1997-2011 by Secret Labs AB + Copyright © 1995-2011 by Fredrik Lundh + +Pillow is the friendly PIL fork. It is + + Copyright © 2010-2023 by Jeffrey A. Clark (Alex) and contributors. + +Like PIL, Pillow is licensed under the open source HPND License: + +By obtaining, using, and/or copying this software and/or its associated +documentation, you agree that you have read, understood, and will comply +with the following terms and conditions: + +Permission to use, copy, modify and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appears in all copies, and that +both that copyright notice and this permission notice appear in supporting +documentation, and that the name of Secret Labs AB or the author not be +used in advertising or publicity pertaining to distribution of the software +without specific, written prior permission. + +SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +darkdetect +Copyright (c) 2019, Alberto Sottile +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of "darkdetect" nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL "Alberto Sottile" BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/en.py b/en.py new file mode 100644 index 0000000..91a9f23 --- /dev/null +++ b/en.py @@ -0,0 +1,161 @@ +import customtkinter +import os +from PIL import Image +from winotify import Notification, audio +from plyer import notification + +version = "0.1" +builddate = "2023/4/27" + +class App(customtkinter.CTk): + def __init__(self): + super().__init__() + + self.title("which_my_toast") + self.geometry("786x380") + self.resizable(height=False, width=False) + + + self.grid_rowconfigure(0, weight=1) + self.grid_columnconfigure(1, weight=1) + + image_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "lib") + self.logo = customtkinter.CTkImage(Image.open(os.path.join(image_path, "logo.png")), size=(59, 54)) + self.title_font = customtkinter.CTkFont(family="meiryo", size=20, weight="bold") + self.info_font = customtkinter.CTkFont(family="meiryo", size=14) + + + self.frame = customtkinter.CTkFrame(self, corner_radius=0) + self.frame.grid(row=0, column=0, sticky="nsew") + self.frame.grid_columnconfigure(4, weight=1) + + self.frame_label = customtkinter.CTkLabel(self.frame, text=" which_my_toast", image=self.logo, compound="left", font=customtkinter.CTkFont(size=15, weight="bold")) + self.frame_label.grid(row=0, column=0, padx=20, pady=20) + + self.library_text = customtkinter.CTkLabel(self.frame, text="Library", compound="left") + self.library_text.grid(row=1, column=0, sticky="ew") + + self.winotify_button = customtkinter.CTkButton(self.frame, height=40, border_spacing=10, text="Winotify", fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), anchor="w", command=self.frame_select_winotify) + self.winotify_button.grid(row=2, column=0, sticky="ew") + + self.plyer_button = customtkinter.CTkButton(self.frame, height=40, border_spacing=10, text="Plyer", fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), anchor="w", command=self.frame_select_plyer) + self.plyer_button.grid(row=3, column=0, sticky="ew") + + self.info_button = customtkinter.CTkButton(self.frame,height=40, border_spacing=10, text="About this app", fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), anchor="w", command=self.which_info) + self.info_button.grid(row=4, column=0, sticky="ew") + + + #winotify欄 + self.winotify_frame = customtkinter.CTkFrame(self, fg_color="transparent") + self.winotify_frame.grid_columnconfigure(0, weight=1) + + self.wn_title_label = customtkinter.CTkLabel(self.winotify_frame, text="Winotify", font=self.title_font) + self.wn_title_label.grid(row=1, column=0, padx=2, pady=5) + + self.wn_info1_label = customtkinter.CTkLabel(self.winotify_frame, text="Recommended method for Windows 10 or later.", font=self.info_font) + self.wn_info1_label.grid(row=2, column=0, padx=5, pady=5) + self.wn_info2_label = customtkinter.CTkLabel(self.winotify_frame, text="※ App icons are not available.", font=self.info_font) + self.wn_info2_label.grid(row=3, column=0, padx=0, pady=0) + + self.wn_app_textbox = customtkinter.CTkEntry(self.winotify_frame, placeholder_text="Application Title", width=520) + self.wn_app_textbox.grid(row=4, column=0, padx=20, pady=10) + + self.wn_title_textbox = customtkinter.CTkEntry(self.winotify_frame, placeholder_text="Title", width=520) + self.wn_title_textbox.grid(row=5, column=0, padx=20, pady=10) + + self.wn_msg_textbox = customtkinter.CTkEntry(self.winotify_frame, placeholder_text="Message", width=520) + self.wn_msg_textbox.grid(row=6, column=0, padx=20, pady=10) + + self.wn_icon_textbox = customtkinter.CTkEntry(self.winotify_frame, placeholder_text="Message Icon Path", width=520) + self.wn_icon_textbox.grid(row=7, column=0, padx=20, pady=10) + + self.wn_send_button = customtkinter.CTkButton(self.winotify_frame, text="Send",compound="right", command=self.winotify_send) + self.wn_send_button.grid(row=8, column=0, padx=40, pady=20) + + #Plyer欄 + self.plyer_frame = customtkinter.CTkFrame(self, fg_color="transparent") + self.plyer_frame.grid_columnconfigure(0, weight=1) + + self.plyer_title_label = customtkinter.CTkLabel(self.plyer_frame, text="Plyer", font=self.title_font) + self.plyer_title_label.grid(row=1, column=0, padx=2, pady=5) + + self.plyer_info1_label = customtkinter.CTkLabel(self.plyer_frame, text="Recommended method for legacy operating systems such as Windows 7", font=self.info_font) + self.plyer_info1_label.grid(row=2, column=0, padx=5, pady=5) + + #self.plyer_info2_label = customtkinter.CTkLabel(self.plyer_frame, text="※アプリアイコンはicoファイルを指定してください。", font=self.info_font) + #self.plyer_info2_label.grid(row=3, column=0, padx=0, pady=0) + + self.plyer_title_textbox = customtkinter.CTkEntry(self.plyer_frame, placeholder_text="Title", width=520) + self.plyer_title_textbox.grid(row=4, column=0, padx=20, pady=10) + + self.plyer_msg_textbox = customtkinter.CTkEntry(self.plyer_frame, placeholder_text="Message", width=520) + self.plyer_msg_textbox.grid(row=5, column=0, padx=20, pady=10) + + self.plyer_icon_textbox = customtkinter.CTkEntry(self.plyer_frame, placeholder_text="Application Icon Path (only ico image)", width=520) + self.plyer_icon_textbox.grid(row=6, column=0, padx=20, pady=10) + + self.plyer_send_button = customtkinter.CTkButton(self.plyer_frame, text="Send", command=self.plyer_send) + self.plyer_send_button.grid(row=7, column=0, padx=40, pady=10) + + + self.select_frame_name("winotify_frame") + + + def select_frame_name(self, name): + self.winotify_button.configure(fg_color=("gray75", "gray25") if name == "winotify_frame" else "transparent") + self.plyer_button.configure(fg_color=("gray75", "gray25") if name == "plyer_frame" else "transparent") + + if name == "winotify_frame": + self.winotify_frame.grid(row=0, column=1, sticky="nsew") + else: + self.winotify_frame.grid_forget() + + if name == "plyer_frame": + self.plyer_frame.grid(row=0, column=1, sticky="nsew") + else: + self.plyer_frame.grid_forget() + + + + def frame_select_winotify(self): + self.select_frame_name("winotify_frame") + + def frame_select_plyer(self): + self.select_frame_name("plyer_frame") + + + #通知送信部 + def winotify_send(self): + winotify_notification = Notification( + app_id = self.wn_app_textbox.get(), + title = self.wn_title_textbox.get(), + msg = self.wn_msg_textbox.get(), + icon = self.wn_icon_textbox.get() + ) + winotify_notification.set_audio(audio.Default, loop=False) + winotify_notification.show() + + def plyer_send(self): + notification.notify( + title = self.plyer_title_textbox.get(), + message = self.plyer_msg_textbox.get(), + app_icon = self.plyer_icon_textbox.get() + ) + + def which_info(self): + print(version) + + which_info_msg_base = "which_my_toast Version {} \nBuild Date {}" + + notification.notify( + title = "About this app", + message = which_info_msg_base.format(version,builddate), + app_icon = r"lib\logo.ico" + ) + + + + +if __name__ == "__main__": + app = App() + app.mainloop() \ No newline at end of file diff --git a/jp.py b/jp.py new file mode 100644 index 0000000..a13b0e5 --- /dev/null +++ b/jp.py @@ -0,0 +1,463 @@ +import tkinter as tk +from tkinter import messagebox +import customtkinter +import os +from PIL import Image +from winotify import Notification, audio +from plyer import notification +from windows_toasts import Toast, ToastDisplayImage, WindowsToaster, InteractableWindowsToaster, AudioSource, ToastAudio, ToastDuration, ToastScenario + +version = "0.2" +builddate = "2023/8/12" + +class App(customtkinter.CTk): + def __init__(self): + super().__init__() + + self.title("which_my_toast") + self.iconbitmap(r".\lib\logo.ico") + self.geometry("820x330") + #1055x330 アクション欄想定 + self.resizable(height=False, width=False) + + + self.grid_rowconfigure(0, weight=1) + self.grid_columnconfigure(1, weight=1) + + image_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "lib") + self.logo = customtkinter.CTkImage(Image.open(os.path.join(image_path, "logo.png")), size=(59, 54)) + self.title_font = customtkinter.CTkFont(family="meiryo", size=20, weight="bold") + self.info_font = customtkinter.CTkFont(family="meiryo", size=14) + self.ui_font = customtkinter.CTkFont(family="meiryo", size=12) + self.button_font = customtkinter.CTkFont(family="meiryo", size=14, weight="bold") + + + self.frame = customtkinter.CTkFrame(self, corner_radius=0) + self.frame.grid(row=0, column=0, sticky="nsew") + self.frame.grid_columnconfigure(6, weight=1) + + self.frame_label = customtkinter.CTkLabel(self.frame, text=" which_my_toast", image=self.logo, compound="left", font=customtkinter.CTkFont(size=15, weight="bold")) + self.frame_label.grid(row=0, column=0, padx=20, pady=20) + + self.library_text = customtkinter.CTkLabel(self.frame, text="ライブラリ", compound="left", font=self.ui_font) + self.library_text.grid(row=1, column=0, sticky="ew") + + self.winotify_button = customtkinter.CTkButton(self.frame, height=40, border_spacing=10, text="Winotify", fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), anchor="w", command=self.frame_select_winotify, font=self.ui_font) + self.winotify_button.grid(row=2, column=0, sticky="ew") + + self.plyer_button = customtkinter.CTkButton(self.frame, height=40, border_spacing=10, text="Plyer", fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), anchor="w", command=self.frame_select_plyer, font=self.ui_font) + self.plyer_button.grid(row=3, column=0, sticky="ew") + + self.wintoasts_button = customtkinter.CTkButton(self.frame, height=40, border_spacing=10, text="Windows-Toasts", fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), anchor="w", command=self.frame_select_wintoasts, font=self.ui_font) + self.wintoasts_button.grid(row=4, column=0, sticky="ew") + + self.tkmsg_button = customtkinter.CTkButton(self.frame, height=40, border_spacing=10, text="Tkinter_messagebox", fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), anchor="w", command=self.frame_select_tkmsg, font=self.ui_font) + self.tkmsg_button.grid(row=5, column=0, sticky="ew") + + self.info_button = customtkinter.CTkButton(self.frame,height=40, border_spacing=10, text="バージョン情報", fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), anchor="w", command=self.which_info, font=self.ui_font) + self.info_button.grid(row=6, column=0, sticky="ew") + + + #winotify欄 + self.winotify_frame = customtkinter.CTkFrame(self, fg_color="transparent") + self.winotify_frame.grid_rowconfigure(5,weight=1) + self.winotify_frame.grid_columnconfigure(5, weight=1) + + + self.wn_app_textbox = customtkinter.CTkEntry(self.winotify_frame, placeholder_text="アプリ名を入力...", width=520, font=self.ui_font) + self.wn_app_textbox.grid(row=0, column=0, padx=24, pady=15) + + self.wn_title_textbox = customtkinter.CTkEntry(self.winotify_frame, placeholder_text="タイトルを入力...", width=520, font=self.ui_font) + self.wn_title_textbox.grid(row=1, column=0, padx=24, pady=15) + + self.wn_msg_textbox = customtkinter.CTkEntry(self.winotify_frame, placeholder_text="メッセージを入力...", width=520, font=self.ui_font) + self.wn_msg_textbox.grid(row=2, column=0, padx=24, pady=15) + + self.wn_icon_textbox = customtkinter.CTkEntry(self.winotify_frame, placeholder_text="メッセージに使うアイコンのパスを入力... 未入力の場合はアイコンなし", width=520, font=self.ui_font) + self.wn_icon_textbox.grid(row=3, column=0, padx=24, pady=15) + + self.wn_control_frame = customtkinter.CTkFrame(self.winotify_frame, fg_color="transparent") + self.wn_control_frame.grid(row=4, column=0) + self.wn_control_frame.grid_rowconfigure(4, weight=1) + self.wn_control_frame.grid_columnconfigure(1, weight=1) + + self.wn_audio_switch = customtkinter.CTkSwitch(self.wn_control_frame, text="通知音を再生", font=self.ui_font) + self.wn_audio_switch.grid(row=1, column=0, padx=15, pady=15) + + self.wn_audio_text = customtkinter.CTkLabel(self.wn_control_frame, text="通知音を選択", font=self.ui_font) + self.wn_audio_text.grid(row=1, column=1, padx=4, pady=15) + + self.wn_audio_select = customtkinter.CTkComboBox(self.wn_control_frame, values=["Default", "Mail", "Reminder", "SMS"], font=self.ui_font, dropdown_font=self.ui_font) + self.wn_audio_select.grid(row=1, column=2, padx=4, pady=4) + + self.wn_icon_button = customtkinter.CTkButton(self.wn_control_frame, text="アイコン選択", command=self.winotify_icon_select, font=self.button_font) + self.wn_icon_button.grid(row=0, column=3, padx=15,pady=4) + + """self.action_frame = customtkinter.CTkFrame(self.winotify_frame) + self.action_frame.grid(row=0, column=1, padx=0, pady=15) + self.action_frame.grid_rowconfigure(5, weight=1) + self.action_frame.grid_columnconfigure(0, weight=1) + + self.action_button = customtkinter.CTkSwitch(self.action_frame, text="ボタンを追加する", font=self.ui_font) + self.action_button.grid(padx=4, pady=15) + + self.action_text1 = customtkinter.CTkEntry(self.action_frame, placeholder_text="ボタンのタイトルを入力...", font=self.ui_font) + self.action_text1.grid(row=1, pady=15)""" + + self.wn_send_button = customtkinter.CTkButton(self.wn_control_frame, text="送信", command=self.winotify_send, font=self.button_font) + self.wn_send_button.grid(row=1, column=3, padx=15, pady=15) + + #Plyer欄 + self.plyer_frame = customtkinter.CTkFrame(self, fg_color="transparent") + self.plyer_frame.grid_rowconfigure(4, weight=1) + self.plyer_frame.grid_columnconfigure(2, weight=1) + + self.plyer_info1_label = customtkinter.CTkLabel(self.plyer_frame, text="Plyerを用いて通知を送信します。Windows 7などレガシーOS向けです。", font=self.info_font) + self.plyer_info1_label.grid(row=0, column=0, padx=24, pady=15) + + self.plyer_title_textbox = customtkinter.CTkEntry(self.plyer_frame, placeholder_text="タイトルを入力...", width=520, font=self.ui_font) + self.plyer_title_textbox.grid(row=1, column=0, padx=24, pady=15) + + self.plyer_msg_textbox = customtkinter.CTkEntry(self.plyer_frame, placeholder_text="メッセージを入力...", width=520, font=self.ui_font) + self.plyer_msg_textbox.grid(row=2, column=0, padx=24, pady=15) + + self.plyer_icon_textbox = customtkinter.CTkEntry(self.plyer_frame, placeholder_text="アイコンのパスを入力... 未入力の場合はアイコンなし", width=520, font=self.ui_font) + self.plyer_icon_textbox.grid(row=3, column=0, padx=24, pady=15) + + self.plyer_control_frame = customtkinter.CTkFrame(self.plyer_frame, fg_color="transparent") + self.plyer_control_frame.grid(row=4) + self.plyer_control_frame.grid_rowconfigure(0, weight=1) + self.plyer_control_frame.grid_columnconfigure(1, weight=1) + + self.plyer_icon_button = customtkinter.CTkButton(self.plyer_control_frame, text="アイコン選択", command=self.plyer_icon_select, font=self.button_font) + self.plyer_icon_button.grid(row=0, column=0, padx=20, pady=15) + + self.plyer_send_button = customtkinter.CTkButton(self.plyer_control_frame, text="送信", command=self.plyer_send, font=self.button_font) + self.plyer_send_button.grid(row=0, column=1, padx=20, pady=15) + + + #windows_toasts欄 + self.wintoasts_frame = customtkinter.CTkFrame(self, fg_color="transparent") + self.wintoasts_frame.grid_rowconfigure(5,weight=1) + self.wintoasts_frame.grid_columnconfigure(5, weight=1) + + + self.wintoasts_app_textbox = customtkinter.CTkEntry(self.wintoasts_frame, placeholder_text="アプリ名を入力...", width=520, font=self.ui_font) + self.wintoasts_app_textbox.grid(row=0, column=0, padx=15, pady=15) + + self.wintoasts_title_textbox = customtkinter.CTkEntry(self.wintoasts_frame, placeholder_text="タイトルを入力...", width=520, font=self.ui_font) + self.wintoasts_title_textbox.grid(row=1, column=0, padx=15, pady=15) + + self.wintoasts_msg_textbox = customtkinter.CTkEntry(self.wintoasts_frame, placeholder_text="メッセージを入力...", width=520, font=self.ui_font) + self.wintoasts_msg_textbox.grid(row=2, column=0, padx=15, pady=15) + + self.wintoasts_icon_textbox = customtkinter.CTkEntry(self.wintoasts_frame, placeholder_text="メッセージに使うアイコンのパスを入力... 未入力の場合はアイコンなし", width=520, font=self.ui_font) + self.wintoasts_icon_textbox.grid(row=3, column=0, padx=15, pady=15) + + self.wintoasts_control_frame = customtkinter.CTkFrame(self.wintoasts_frame, fg_color="transparent") + self.wintoasts_control_frame.grid(row=4, column=0) + self.wintoasts_control_frame.grid_rowconfigure(4, weight=1) + self.wintoasts_control_frame.grid_columnconfigure(1, weight=1) + + self.wintoasts_audio_switch = customtkinter.CTkSwitch(self.wintoasts_control_frame, text="通知音を再生", font=self.ui_font) + self.wintoasts_audio_switch.grid(row=1, column=0, padx=1, pady=4) + + self.wintoasts_scene_text = customtkinter.CTkLabel(self.wintoasts_control_frame, text="シーンと表示時間", font=self.ui_font) + self.wintoasts_scene_text.grid(row=0, column=0, padx=4, pady=4) + + self.wintoasts_scene_select = customtkinter.CTkComboBox(self.wintoasts_control_frame, values=["Default", "alarm", "reminder", "incomingCall", "urgent"], font=self.ui_font, dropdown_font=self.ui_font) + self.wintoasts_scene_select.grid(row=0, column=1, padx=4, pady=4) + + self.wintoasts_audio_text = customtkinter.CTkLabel(self.wintoasts_control_frame, text="通知音を選択", font=self.ui_font) + self.wintoasts_audio_text.grid(row=1, column=1, padx=4, pady=4) + + self.wintoasts_audio_select = customtkinter.CTkComboBox(self.wintoasts_control_frame, values=["Default", "Mail", "SMS"], font=self.ui_font, dropdown_font=self.ui_font) + self.wintoasts_audio_select.grid(row=1, column=2, padx=4, pady=4) + + self.wintoasts_icon_button = customtkinter.CTkButton(self.wintoasts_control_frame, text="アイコン選択", command=self.wintoasts_icon_select, font=self.button_font) + self.wintoasts_icon_button.grid(row=0, column=3, padx=4,pady=4) + + self.wintoasts_duration_select = customtkinter.CTkComboBox(self.wintoasts_control_frame, values=["標準", "短め", "長め"], font=self.ui_font, dropdown_font=self.ui_font) + self.wintoasts_duration_select.grid(row=0, column=2, padx=4, pady=4) + + self.wintoasts_send_button = customtkinter.CTkButton(self.wintoasts_control_frame, text="送信", command=self.wintoasts_send, font=self.button_font) + self.wintoasts_send_button.grid(row=1, column=3, padx=15, pady=15) + + + #tkinter_messagebox欄 + self.tkmsg_frame = customtkinter.CTkFrame(self, fg_color="transparent") + self.tkmsg_frame.grid_rowconfigure(5,weight=1) + self.tkmsg_frame.grid_columnconfigure(5, weight=1) + + self.tkmsg_title_textbox = customtkinter.CTkEntry(self.tkmsg_frame, placeholder_text="タイトルを入力...", width=520, font=self.ui_font) + self.tkmsg_title_textbox.grid(row=0, column=0, padx=15, pady=15) + + self.tkmsg_msg_textbox = customtkinter.CTkEntry(self.tkmsg_frame, placeholder_text="メッセージを入力...", width=520, font=self.ui_font) + self.tkmsg_msg_textbox.grid(row=1, column=0, padx=15, pady=15) + + self.tkmsg_control_frame = customtkinter.CTkFrame(self.tkmsg_frame, fg_color="transparent") + self.tkmsg_control_frame.grid(row=3, column=0) + self.tkmsg_control_frame.grid_rowconfigure(4, weight=1) + self.tkmsg_control_frame.grid_columnconfigure(1, weight=1) + + + self.tkmsg_scene_text = customtkinter.CTkLabel(self.tkmsg_control_frame, text="シーン", font=self.ui_font) + self.tkmsg_scene_text.grid(row=0, column=0, padx=4, pady=4) + + self.tkmsg_scene_select = customtkinter.CTkComboBox(self.tkmsg_control_frame, values=["showerror", "showwarning", "showinfo", "askquestion", "askokcancel", "askretrycancel", "askyesno", "askyesnocancel"], font=self.ui_font, dropdown_font=self.ui_font) + self.tkmsg_scene_select.grid(row=0, column=1, padx=4, pady=4) + + self.tkmsg_icon_text = customtkinter.CTkLabel(self.tkmsg_control_frame, text="アイコンを上書き", font=self.ui_font) + self.tkmsg_icon_text.grid(row=1, column=0, padx=4, pady=4) + + self.tkmsg_icon_select = customtkinter.CTkComboBox(self.tkmsg_control_frame, values=["error", "info", "question", "warning"], font=self.ui_font, dropdown_font=self.ui_font) + self.tkmsg_icon_select.grid(row=1, column=1, padx=4, pady=4) + + self.tkmsg_send_button = customtkinter.CTkButton(self.tkmsg_control_frame, text="送信", command=self.tkmsg_send, font=self.button_font) + self.tkmsg_send_button.grid(row=1, column=4, padx=60, pady=15) + + + self.select_frame_name("winotify_frame") + + + def select_frame_name(self, name): + self.winotify_button.configure(fg_color=("gray75", "gray25") if name == "winotify_frame" else "transparent") + self.plyer_button.configure(fg_color=("gray75", "gray25") if name == "plyer_frame" else "transparent") + self.wintoasts_button.configure(fg_color=("gray75", "gray25") if name == "wintoasts_frame" else "transparent") + self.tkmsg_button.configure(fg_color=("gray75", "gray25") if name == "tkmsg_frame" else "transparent") + + if name == "winotify_frame": + self.winotify_frame.grid(row=0, column=1, sticky="nsew") + else: + self.winotify_frame.grid_forget() + + if name == "plyer_frame": + self.plyer_frame.grid(row=0, column=1, sticky="nsew") + else: + self.plyer_frame.grid_forget() + + if name == "wintoasts_frame": + self.wintoasts_frame.grid(row=0, column=1, sticky="nsew") + else: + self.wintoasts_frame.grid_forget() + + if name == "tkmsg_frame": + self.tkmsg_frame.grid(row=0, column=1, sticky="nsew") + else: + self.tkmsg_frame.grid_forget() + + + + def frame_select_winotify(self): + self.select_frame_name("winotify_frame") + + def frame_select_plyer(self): + self.select_frame_name("plyer_frame") + + def frame_select_wintoasts(self): + self.select_frame_name("wintoasts_frame") + + def frame_select_tkmsg(self): + self.select_frame_name("tkmsg_frame") + + def winotify_icon_select(self): + wn_icon_type = [('画像ファイル','*.png *.jpg *.ico')] + wn_icon_path = tk.filedialog.askopenfilename(title="アイコンを選択...", filetypes = wn_icon_type, initialdir = r".\icon") + self.wn_icon_textbox.delete(0, tk.END) + self.wn_icon_textbox.insert(0, wn_icon_path) + + def plyer_icon_select(self): + pl_icon_type = [('アイコンファイル','*.ico')] + pl_icon_path = tk.filedialog.askopenfilename(title="アイコンを選択...", filetypes = pl_icon_type, initialdir = r".\icon") + self.plyer_icon_textbox.delete(0, tk.END) + self.plyer_icon_textbox.insert(0, pl_icon_path) + + def wintoasts_icon_select(self): + wintoasts_icon_type = [('画像ファイル','*.png *.jpg *.ico')] + wintoasts_icon_path = tk.filedialog.askopenfilename(title="アイコンを選択...", filetypes = wintoasts_icon_type, initialdir = r".\icon") + self.wintoasts_icon_textbox.delete(0, tk.END) + self.wintoasts_icon_textbox.insert(0, wintoasts_icon_path) + + + + #通知送信部 + def winotify_send(self): + winotify_notification = Notification( + app_id = self.wn_app_textbox.get(), + title = self.wn_title_textbox.get(), + msg = self.wn_msg_textbox.get(), + icon = self.wn_icon_textbox.get() + ) + winotify_audio_check = self.wn_audio_switch.get() + + if winotify_audio_check == 1: + wn_audio_check_name = self.wn_audio_select.get() + + if wn_audio_check_name == "Default": + winotify_notification.set_audio(audio.Default, loop=False) + + if wn_audio_check_name == "Mail": + winotify_notification.set_audio(audio.Mail, loop=False) + + if wn_audio_check_name == "Reminder": + winotify_notification.set_audio(audio.Reminder, loop=False) + + if wn_audio_check_name == "SMS": + winotify_notification.set_audio(audio.SMS, loop=False) + + + winotify_notification.show() + + def plyer_send(self): + notification.notify( + title = self.plyer_title_textbox.get(), + message = self.plyer_msg_textbox.get(), + app_icon = self.plyer_icon_textbox.get() + ) + + def wintoasts_send(self): + if self.wintoasts_icon_textbox.get() == "": + wintoasts_text_notification = InteractableWindowsToaster(self.wintoasts_msg_textbox.get()) + wintoasts_text_notification_base = Toast() + wintoasts_text_notification_base.SetBody(self.wintoasts_title_textbox.get()) + wintoasts_audio_check = self.wintoasts_audio_switch.get() + + #通知音 + if wintoasts_audio_check == 1: + wintoasts_audio_check_name = self.wintoasts_audio_select.get() + if wintoasts_audio_check_name == "Default": + wintoasts_text_notification_base.SetAudio(ToastAudio(AudioSource.Default)) + if wintoasts_audio_check_name == "Mail": + wintoasts_text_notification_base.SetAudio(ToastAudio(AudioSource.Mail)) + if wintoasts_audio_check_name == "SMS": + wintoasts_text_notification_base.SetAudio(ToastAudio(AudioSource.SMS)) + + else: + wintoasts_text_notification_base.SetAudio(ToastAudio(silent=True)) + + #表示時間(11だと変わらん) + wintoasts_duration_check = self.wintoasts_duration_select.get() + if wintoasts_duration_check == "標準": + wintoasts_text_notification_base.SetDuration(ToastDuration("Default")) + if wintoasts_duration_check == "短め": + wintoasts_text_notification_base.SetDuration(ToastDuration("short")) + if wintoasts_duration_check == "長め": + wintoasts_text_notification_base.SetDuration(ToastDuration("long")) + + #シーン + wintoasts_scene_check = self.wintoasts_scene_select.get() + if wintoasts_scene_check == "Default": + pass + else: + wintoasts_text_notification_base.SetScenario(ToastScenario(wintoasts_scene_check)) + + wintoasts_text_notification.show_toast(wintoasts_text_notification_base) + + else: + wintoasts_img_notification = WindowsToaster(self.wintoasts_app_textbox.get()) + wintoasts_img_notification_base = Toast() + wintoasts_img_notification_base.SetHeadline(self.wintoasts_title_textbox.get()) + wintoasts_img_notification_base.SetBody(self.wintoasts_msg_textbox.get()) + wintoasts_img_notification_base.AddImage(ToastDisplayImage.fromPath(self.wintoasts_icon_textbox.get())) + + #通知音 + wintoasts_audio_check = self.wintoasts_audio_switch.get() + if wintoasts_audio_check == 1: + wintoasts_audio_check_name = self.wintoasts_audio_select.get() + if wintoasts_audio_check_name == "Default": + wintoasts_img_notification_base.SetAudio(ToastAudio(AudioSource.Default)) + if wintoasts_audio_check_name == "Mail": + wintoasts_img_notification_base.SetAudio(ToastAudio(AudioSource.Mail)) + if wintoasts_audio_check_name == "SMS": + wintoasts_img_notification_base.SetAudio(ToastAudio(AudioSource.SMS)) + + else: + wintoasts_img_notification_base.SetAudio(ToastAudio(silent=True)) + + #表示時間 + wintoasts_duration_check = self.wintoasts_duration_select.get() + if wintoasts_duration_check == "標準": + wintoasts_img_notification_base.SetDuration(ToastDuration("Default")) + if wintoasts_duration_check == "短め": + wintoasts_img_notification_base.SetDuration(ToastDuration("short")) + if wintoasts_duration_check == "長め": + wintoasts_img_notification_base.SetDuration(ToastDuration("long")) + + #シーン + wintoasts_scene_check = self.wintoasts_scene_select.get() + if wintoasts_scene_check == "Default": + pass + else: + wintoasts_img_notification_base.SetScenario(ToastScenario(wintoasts_scene_check)) + + wintoasts_img_notification.show_toast(wintoasts_img_notification_base) + + def tkmsg_send(self): + tkmsg_scene_check = self.tkmsg_scene_select.get() + if tkmsg_scene_check == "showerror": + messagebox.showerror( + title = self.tkmsg_title_textbox.get(), + message = self.tkmsg_msg_textbox.get(), + icon = self.tkmsg_icon_select.get(), + ) + elif tkmsg_scene_check == "showwarning": + messagebox.showwarning( + title = self.tkmsg_title_textbox.get(), + message = self.tkmsg_msg_textbox.get(), + icon = self.tkmsg_icon_select.get(), + ) + elif tkmsg_scene_check == "showinfo": + messagebox.showinfo( + title = self.tkmsg_title_textbox.get(), + message = self.tkmsg_msg_textbox.get(), + icon = self.tkmsg_icon_select.get(), + ) + elif tkmsg_scene_check == "askquestion": + messagebox.askquestion( + title = self.tkmsg_title_textbox.get(), + message = self.tkmsg_msg_textbox.get(), + icon = self.tkmsg_icon_select.get(), + ) + elif tkmsg_scene_check == "askokcancel": + messagebox.askokcancel( + title = self.tkmsg_title_textbox.get(), + message = self.tkmsg_msg_textbox.get(), + icon = self.tkmsg_icon_select.get(), + ) + elif tkmsg_scene_check == "askretrycancel": + messagebox.askretrycancel( + title = self.tkmsg_title_textbox.get(), + message = self.tkmsg_msg_textbox.get(), + icon = self.tkmsg_icon_select.get(), + ) + elif tkmsg_scene_check == "askyesno": + messagebox.askyesno( + title = self.tkmsg_title_textbox.get(), + message = self.tkmsg_msg_textbox.get(), + icon = self.tkmsg_icon_select.get(), + ) + elif tkmsg_scene_check == "askyesnocancel": + messagebox.askyesnocancel( + title = self.tkmsg_title_textbox.get(), + message = self.tkmsg_msg_textbox.get(), + icon = self.tkmsg_icon_select.get(), + ) + + + + def which_info(self): + print(version) + + which_info_msg_base = "which_my_toast バージョン {} \nビルド日時 {}" + + notification.notify( + title = "このアプリについて", + message = which_info_msg_base.format(version,builddate), + app_icon = r"lib\logo.ico" + ) + + + +if __name__ == "__main__": + app = App() + app.mainloop() \ No newline at end of file diff --git a/jp.spec b/jp.spec new file mode 100644 index 0000000..1710959 --- /dev/null +++ b/jp.spec @@ -0,0 +1,51 @@ +# -*- mode: python ; coding: utf-8 -*- + + +block_cipher = None + + +a = Analysis( + ['jp.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=['plyer.platforms.win.notification'], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) + +exe = EXE( + pyz, + a.scripts, + [], + exclude_binaries=True, + name='jp', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon=['lib\\logo.ico'], +) +coll = COLLECT( + exe, + a.binaries, + a.zipfiles, + a.datas, + strip=False, + upx=True, + upx_exclude=[], + name='jp', +) diff --git a/lib/logo.ico b/lib/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..848a803d4483a8440e76f499d89d18a3244a244e GIT binary patch literal 13238 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 SiKJbgiG|;giJznJZ0291R8KYl literal 0 HcmV?d00001 diff --git a/lib/logo.png b/lib/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..26d7c9e90be2b74b0968f875a23dc1c93041b3ad GIT binary patch literal 3417 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 literal 0 HcmV?d00001 diff --git a/pyinstaller.txt b/pyinstaller.txt new file mode 100644 index 0000000..fc43ee7 --- /dev/null +++ b/pyinstaller.txt @@ -0,0 +1,5 @@ +old +C:\Users\suti7\AppData\Local\Programs\Python\Python38-32\Scripts\pyinstaller.exe jp.py --noconsole --onedir -i .\lib\logo.ico --hidden-import plyer.platforms.win.notification + +for onefile +pyinstaller .\jp.py --noconsole --onefile -i .\lib\logo.ico --hidden-import plyer.platforms.win.notification --add-data "C:\Users\suti7\Dev\temp\which_my_toast\lib:lib" \ No newline at end of file