ちょこっと業務を簡略化したい
この記事では、ちょこっと効率化させたいことをプログラミングやツールをつかって解決していきます
ちょこっと削減した時間を、もっと人生楽しくなることに使いましょう!
本日のお題
スクショしたデータを、一発で特定のフォルダーに保存!
Mac:デスクトップ
Windows:「ピクチャ」フォルダー内の「スクリーンショット」フォルダー
特定のフォルダーへ移動させたい時、「ファイル名変更+フォルダー移動」 めんどくさくないですか?
もし複数スクショしたい場合、あーもう!😡💢 ってなりませんか?
こんな時に役に立ちます。
pythonデスクトップアプリ(tkinter)解決してみた
<環境>
🖥 Windows
🐍 python 3.12.5
🏆 VSCode
動画(音量調整してください⚠) ↓
① 実行画面↓

② スクショする
Mac: Command (⌘) + Shift + 4
Windows: Win + Shift + S
③ 内容の確認
クリックボードからスクリーンショットを表示
をクリック

④ ファイル名の変更
デフォルトで「印刷記事」を記入してあるのでファイル名を変更してください
⑤ フォルダー指定
表示されたスクリーンショットをPNGとして保存
をクリックでファイルの選択

⑥ 完了!

フォルダーの指定とファイル名変更ができました✨
tkinter コード一部解説
※文言変更してください!
① デフォルトのファイル名を変更する
デフォルトを設定できます
# デフォルトの記事名(ここ変更)
filename_entry.insert(0, "印刷記事")
2箇所あり
② ボタンの意味
-
クリックボードからスクリーンショットを表示
→ スクショしてからボタンを押すと上にイメージが出てくる(サイズ調整していない) -
表示されたスクリーンショットをPNGとして保存
→ PNGとして特定のフォルダーに保存する -
すべてリセット
→ 消去
全体コード
全体コードはこちら
import customtkinter as ctk
from tkinter import filedialog
from PIL import Image, ImageTk, ImageGrab
import os
import time
# tkinterウィンドウの作成
ctk.set_appearance_mode("System")
ctk.set_default_color_theme("blue")
root = ctk.CTk()
root.geometry("500x600")
display_image = None
message_label = ctk.CTkLabel(root, text="", fg_color="red")
message_label.pack(pady=10)
filename_label = ctk.CTkLabel(root, text="保存するファイル名 :")
filename_label.pack(pady=5)
filename_entry = ctk.CTkEntry(root, width=200)
filename_entry.pack(pady=10)
# デフォルトの記事名(ここ変更)
filename_entry.insert(0, "印刷記事")
# キャンバスの作成
canvas = ctk.CTkCanvas(root, width=500, height=300)
canvas.pack()
def display_screenshot_from_clipboard():
global display_image
time.sleep(1)
screenshot = ImageGrab.grabclipboard()
if isinstance(screenshot, Image.Image):
display_image = ImageTk.PhotoImage(screenshot)
canvas.create_image(0, 0, anchor="nw", image=display_image)
message_label.configure(text="スクリーンショットが表示されました", fg_color="green")
else:
message_label.configure(text="クリップボードに画像がありません。もう一度スクリーンショットを選択してください。", fg_color="red")
# 画像をPNGとして保存する関数
def save_image_as_png():
if display_image is not None:
screenshot = ImageGrab.grabclipboard()
file_name = filename_entry.get().strip()
if not file_name:
message_label.configure(text="ファイル名を入力してください。", fg_color="red")
return
save_directory = filedialog.askdirectory()
if save_directory:
png_path = os.path.join(save_directory, f"{file_name}.png")
screenshot.save(png_path, "PNG")
message_label.configure(text=f"PNGが保存されました: {png_path}", fg_color="green")
else:
message_label.configure(text="保存先が選択されていません。", fg_color="red")
else:
message_label.configure(text="表示された画像がありません。スクリーンショットを取得してください。", fg_color="red")
# すべてをリセットする関数
def reset_all():
global display_image
display_image = None
canvas.delete("all")
filename_entry.delete(0, ctk.END)
# デフォルトの記事名(ここ変更)
filename_entry.insert(0, "印刷記事")
message_label.configure(text="すべてがリセットされました。", fg_color="green")
display_button = ctk.CTkButton(root, text="クリップボードからスクリーンショットを表示", command=display_screenshot_from_clipboard)
display_button.pack(pady=10)
save_button = ctk.CTkButton(root, text="表示されたスクリーンショットをPNGとして保存", command=save_image_as_png)
save_button.pack(pady=10)
reset_button = ctk.CTkButton(root, text="すべてリセット", command=reset_all)
reset_button.pack(pady=10)
root.mainloop()
🧡最後に
このコードをベースに修正し、業務をちょこっと楽にしてみてください〜
今後、このようにちょっとした効率化のための情報を載せます。あなたの業務でも役立つこと願っています💓