以前作成した「pyperclip」を用いたワードクリップアプリを改造して、ショートカットアプリを作成していきます。
- ワードクリップアプリ
今回は、上記のワードクリップ機能に加えて、登録されたurlをブラウザで開くショートカット機能を追加します。
目次
アプリ概要
以下に、作成したアプリの外観を示します。
4つのボタンが並べて表示されており、タイトルが「NBA」、「NTT」、「WSJ」、「Files」となっています。
ボタンをクリックすると、それぞれに登録されたurlをブラウザで開きます。
例えば、「WSJ」をクリックしてみると、自動でwebブラウザが立ち上がり、Wall Street Journalのトップページを開きます。
また、以前作成したワードクリップ機能も生きているため、適当なところにペーストすると、正式名称である「THE WALL STREET JOURNAL.」が貼り付けられます。
web上だけでなく、PC内のフォルダへのショートカットとしても使用できます。
一番下の「Files」ボタンには、「C:\Program Files」フォルダが登録されており、クリックするとエクスプローラでそのフォルダを開いてくれます。
特定のwebサイトを開くために、「ブラウザを開く→お気に入りを開く→クリックする」という一連の作業が、ワンクリックで完結するので、使ってみると非常に便利です。
また、PC内のフォルダへのショートカットも一緒に表示できるので、デスクトップ上がかなりすっきりします。
webサイトへのログインパスワードやidを自動でクリップボードにコピーするように設定すれば、煩わしい入力作業が不要になります。(セキュリティー面で不安はありますが。)
コードの解説
まずは、使用するモジュールをインポートします。
使用するのは、前回使用した「pyperclip」と「tkinter」の二つに加えて、「webbrowser」を使用します。
「webbrowser」はデフォルトでインストールされているモジュールです。
import pyperclip import tkinter import webbrowser
次に、ボタンをクリックすると登録されたurlをブラウザで開く、「ShortCutButton」クラスを作成していきます。
tkinterのButtonクラスを継承し、上書きすることで、urlをブラウザで開く機能を追加します。
クラスやメソッドの名称を修正していますが、基本的には以前作成したワードクリップアプリと同じ構造で、文字列のコピー機能も残してあります。
class ShortCutButton(tkinter.Button): #1 ''' 登録したurlをブラウザで開くボタンを生成 clipwordを登録すると、登録した文字をクリップボードにコピー(任意) ''' def __init__(self, title, url, clipword=None, master=None): #2 super().__init__(master, width=15, text=title, command=self.button_clicked) #3 self.url = url #4 self.clipword = clipword #5 def button_clicked(self): #6 if self.clipword: pyperclip.copy(self.clipword) #7 if self.url: webbrowser.open(self.url) #8
同じような機能を持つボタンを複数個作る場合は、このようにButtonクラスを上書きしたクラスを作成するとコードが見やすくなります。
以下、簡単な解説になります。
- tkinterのButtonクラスを継承した「ShortCutButton」クラス
- ボタンに表示させるタイトル、ブラウザで開くurl、コピーする文字列を引数にとる(コピーする文字列は省略可)
- commandオプションでクリック時にbutton_clickedメソッドを実行するように設定
- urlをインスタンス変数に設定
- clipwordをインスタンス変数に設定
- ボタンクリック時に実行されるメソッド
- clipwordが入力されている場合、クリップボードにコピー
- urlが入力されている場合、ブラウザでurlを開く
3では、super関数を用いて継承元であるtkinterのButtonクラスのtextオプションとcommandオプションの設定をしています。 super関数については、こちらを参照してください。
8では、「webbrowser」モジュールを用いてurlを開いています。webbrowser.open(url)
とするだけで、自動でデフォルトのブラウザを用いてurlを開いてくれます。
最後に、「ShortCutButton」クラスを用いて、ボタンを作成していけば完成です。
if __name__ == '__main__': #1 word_list = [ ["NBA", "https://www.sportingnews.com/jp/nba", "National Bascketball America"], ["NTT", "http://www.ntt.co.jp/", "日本電信電話株式会社"], ["WSJ", "https://www.wsj.com/", "THE WALL STREET JOURNAL."], ["Files", "C:\Program Files"], ] #2 root = tkinter.Tk() for info in word_list: button = ShortCutButton(*info) button.pack() root.mainloop()
- ボタン設定のためのリスト
- for文でボタンを生成
2ではfor文を用いてリストの内容のボタンを生成しています。タイトル、url、コピーする文字列の3つの引数を、ShortCutButton(*info)
で一括で渡しています。
コード全文
import pyperclip import tkinter import webbrowser class ShortCutButton(tkinter.Button): ''' 登録したurlをブラウザで開くボタンを生成 clipwordを登録すると、登録した文字をクリップボードにコピー(任意) ''' def __init__(self, title, url, clipword=None, master=None): super().__init__(master, width=15, text=title, command=self.button_clicked) self.url = url self.clipword = clipword def button_clicked(self): if self.clipword: pyperclip.copy(self.clipword) #clipwordをコピー if self.url: webbrowser.open(self.url) #urlをブラウザで開く if __name__ == '__main__': #ボタン、url、コピーする文字列のリスト word_list = [ ["NBA", "https://www.sportingnews.com/jp/nba", "National Bascketball America"], ["NTT", "http://www.ntt.co.jp/", "日本電信電話株式会社"], ["WSJ", "https://www.wsj.com/", "THE WALL STREET JOURNAL."], ["Files", "C:\Program Files"], ] #ボタンを生成 root = tkinter.Tk() for info in word_list: button = ShortCutButton(*info) button.pack() root.mainloop()