はじめに
初学者がPythonを勉強しています。
間違っている内容や改善などご教示いただければ幸いです。
目的
(共通)Pythonを学習するにあたり、まずは身近にある業務の省人化を目的とする。
(今回)Screenshot撮影(今回は全体) → メーラー(OUTLOOK)起動
*2023.4 chatGPT参考に作成
環境
Windows10
Python 3.8.3 (memo: python -V
全体コード
以下、全体コード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import time
import tkinter as tk
from tkinter import messagebox
import pyautogui
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.to =
mail.bcc =
mail.subject =
mail.body =
def take_screenshot():
i = 1
while True:
# スクリーンショットを撮影する
screenshot = pyautogui.screenshot(region=(0, 0, 1920, 1080))
screenshot = screenshot.resize((960, 540))
# スクリーンショットを保存する
screenshot_path = os.path.join(os.getcwd(), "temp" + str(i) + ".png")
screenshot.save(screenshot_path)
# スクリーンショットをメールに添付する
attachment = mail.Attachments.Add(screenshot_path)
attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E", "temp" + str(i) + ".png")
html_tag = '<img src="cid:temp' + str(i) + '.png">'
mail.HTMLBody += html_tag
# スクリーンショットがメールに添付された旨のメッセージを表示する
print("temp" + str(i) + ".pngがメールに添付されました。")
i += 1
# ユーザーに繰り返しの可否を尋ねる
answer = messagebox.askquestion("繰り返し", "もう1回キャプチャしますか?")
time.sleep(0.4)
if answer == 'no':
print('if break')
break
root.destroy()
# Outlookを最前面に表示する
print('Outlookを最前面に表示する')
os.startfile("outlook")
time.sleep(6) # Outlookが完全に起動するのを待つ
# メールを表示する
print('メール表示')
# メールを表示する
mail.Display(True)
# Outlookを終了する
outlook.Quit()
# スクリーンショットを削除する
for j in range(1, i):
screenshot_path = os.path.join(os.getcwd(), "temp" + str(j) + ".png")
os.remove(screenshot_path)
# 終了メッセージを表示する
print("プログラムを終了します。")
root = tk.Tk()
root.withdraw() # GUIウィンドウを非表示にする
messagebox.askquestion("","キャプチャする画面を開いてください。開くとすぐにキャプチャします")
take_screenshot() # messageboxを表示する
今後の課題(雑感多め)
【全体】
chatGPTへの指示によりほぼ作成したため、コードがどこまで正しいかの判断をつけるのが困難。(コード理解はあるが、その関数を用いる理由まで深掘りすると・・
可続性、メンテ性を考慮した場合、コメントでの理解(これはchatGPTがベース作成→人が補完)が必須。
当方のようなpython実務経験が浅い人間でも
chatGPTを用いるととりあえずは完成できる。(人は指示する能力、修正させる能力を上げた方がよい)
これは企業規模が小さい場所の方が優位性がある。(自由度が高い、ミスしても影響範囲が小さく、ケアしやすく人の経験値も上がりやすい。)
*リスクもあるため、そこは天秤
【細かい箇所】
chatGPTを用いたため、これからは出力を増やすことに注力。(時間をかけていくより、OUTPUT量を増やす)
次の展開
目的に沿って、次の業務改善に繋がるプログラムを作成する
OUTPUT継続
最後に
今回もお付き合いありがとうございました。