【PythonでGUIアプリ入門】PySimpleGUI、Pyperclip を使った クリップボードアプリ の作り方

PySimpleGUI
けんろう
けんろう

PySimpleGUIでは、簡単にGUIアプリが自作できます。

普段のお仕事に便利なクリップボードアプリを作ってみました。 

この記事では、PySimpleGUIを使ったアプリの作り方を紹介します。

この記事に載っているサンプルコードをコピーして、Pythonで実行すれば、簡単に動きを確認できますので、是非試してみて下さい。

この記事では、初心者にもわかりやすいように、各処理の内容を、サンプルコード内にコメントとして載せています。

人工知能技術専門プログラミングスクール「AIジョブカレ」の無料説明会参加、講座申込み
スポンサーリンク

今回作成するアプリ

今回のアプリは、クリップボードアプリです。

アプリに登録した文章をクリップボードへ貼り付けて、WordやPowerPointなどに貼り付けたりできるアプリです。よく使う文章を登録しておくと、便利です。

任意のテキストを選択して、「Ctrl+C」を押すと、「コピー1」の入力欄に、コピーしたテキストが入ります。

クリップボードへ入れる場合は、チェックボックスをチェックして、「クリップボードへコピー」ボタンを押すと、クリップボードに格納されます。この状態で、「Ctrl+V」を押すと、選択したテキストをペーストできます。

準備

PySimpleGUIのインストールの仕方は、以下の記事で紹介しています。

Pyperclipは、クリップボードのデータを取り出したり、書き換えたりできるライブラリです。
以下のコマンドを使って、インストールしてください。

pip install pyperclip

サンプルコード


#!usr/bin/env python
# -*- coding: utf-8 -*-

import PySimpleGUI as sg
import pyperclip

sg.theme('LightGreen1')       # ウィンドウテーマをブラックで設定

# 画面レイアウト(1段目:空白、2段目:時間、3段目:ボタン、ボタン、ボタン)
layout = [
        [sg.Text(' クリップボードアプリ ')],
        [sg.Checkbox('コピー1', size=(20,1), key='-CHECK1-'), sg.Multiline('',key='-COPY1-')],
        [sg.Checkbox('コピー2', size=(20,1), key='-CHECK2-'), sg.Multiline('',key='-COPY2-')],
        [sg.Checkbox('コピー3', size=(20,1), key='-CHECK3-'), sg.Multiline('',key='-COPY3-')],
        [sg.Checkbox('コピー4', size=(20,1), key='-CHECK4-'), sg.Multiline('',key='-COPY4-')],
        [sg.Checkbox('コピー5', size=(20,1), key='-CHECK5-'), sg.Multiline('',key='-COPY5-')],
        [sg.Checkbox('コピー6', size=(20,1), key='-CHECK6-'), sg.Multiline('',key='-COPY6-')],
        [sg.Checkbox('コピー7', size=(20,1), key='-CHECK7-'), sg.Multiline('',key='-COPY7-')],
        [sg.Checkbox('コピー8', size=(20,1), key='-CHECK8-'), sg.Multiline('',key='-COPY8-')],
        [sg.Button('クリップボードへコピー', key='-COPY-', button_color=('white', '#001480'))],
        [sg.Exit(button_color=('white', 'firebrick4'), key='Exit')]
    ]

# ウィンドウの生成
window = sg.Window(' クリップボードアプリ ', layout)

# 今クリップボードに入っているデータは破棄
getdata_old = pyperclip.paste()

# メイン処理
while True:
    event, values = window.read(timeout=1000)    # 入力イベントを監視

    # ウィンドウ上のボタン操作時の処理
    if event in (sg.WIN_CLOSED, 'Exit'):        # Exitボタン押下時は、処理終了
        break

    if event == '-COPY-':   # コピーボタン押下時は、選択されたテキストをクリップボードへ戻す

        if values['-CHECK1-'] == True:
            data = values['-COPY1-']
        elif values['-CHECK2-'] == True:
            data = values['-COPY2-']
        elif values['-CHECK3-'] == True:
            data = values['-COPY3-']
        elif values['-CHECK4-'] == True:
            data = values['-COPY4-']
        elif values['-CHECK5-'] == True:
            data = values['-COPY5-']
        elif values['-CHECK6-'] == True:
            data = values['-COPY6-']
        elif values['-CHECK7-'] == True:
            data = values['-COPY7-']
        elif values['-CHECK8-'] == True:
            data = values['-COPY8-']
        else:
            data = ''

        # クリップボードへコピー
        pyperclip.copy(data)

        print('クリップボードへコピーされたテキスト=',data)


    getdata = pyperclip.paste()
    print('クリップボードから取り出したテキスト=',getdata)

    # 取得したクリップボードのデータが前回と同じなら、なにもしない
    if getdata == getdata_old:
        continue

    # 取得したクリップボードのデータがすでに登録済みかどうかをチェック
    if values['-COPY1-'] == getdata: 
        continue
    elif values['-COPY2-'] == getdata: 
        continue
    elif values['-COPY3-'] == getdata: 
        continue
    elif values['-COPY4-'] == getdata: 
        continue
    elif values['-COPY5-'] == getdata: 
        continue
    elif values['-COPY6-'] == getdata: 
        continue
    elif values['-COPY7-'] == getdata: 
        continue
    elif values['-COPY8-'] == getdata: 
        continue

    # 空いているところに、取得したクリップボードのデータを格納する
    if values['-COPY1-'] == '':
        window['-COPY1-'].update(getdata)
    elif values['-COPY2-'] == '':
        window['-COPY2-'].update(getdata)
    elif values['-COPY3-'] == '':
        window['-COPY3-'].update(getdata)
    elif values['-COPY4-'] == '':
        window['-COPY4-'].update(getdata)
    elif values['-COPY5-'] == '':
        window['-COPY5-'].update(getdata)
    elif values['-COPY6-'] == '':
        window['-COPY6-'].update(getdata)
    elif values['-COPY7-'] == '':
        window['-COPY7-'].update(getdata)
    elif values['-COPY8-'] == '':
        window['-COPY8-'].update(getdata)

    getdata_old = getdata

window.close()

動かし方

実行すると、下図のようなウィンドウが立ち上がります。

クリップボードアプリに、テキストを格納する

・任意のテキストをマウスで選択して、「Ctrl+C」ボタンを押すと、「コピー1」の入力欄にそのテキストが入力されます。

・また異なるテキストを選択して、「Ctrl+C」ボタンを押すと、「コピー2」の入力欄にそのテキストが入力されます。

・同じテキストを選択した場合は、追加されないような処理を組み込んでいます。

クリップボードアプリからテキストを取り出す

任意のチェックボックスにチェックを入れて、「クリップボードへコピー」ボタンを押下すると、選択したテキストがクリップボードへ戻されます。

メモ帳等に、「Ctrl+V」すると、クリップボードを通じて、ペーストされます。

\ Pythonを勉強するなら、環境構築が楽で安いラズパイがオススメです /

まとめ

今回は、Pythonライブラリである、PySimpleGUI、Pyperclip を使った、クリップボードアプリの作り方を紹介しました。

コメント

タイトルとURLをコピーしました