1. 完成図
初期状態では全てのチェックが外れていますが、「全てにチェックを入れる」「全てのチェックを外す」ボタンでチェックの一括操作が可能で、「キャンセル」をクリックするとチェックが入っていても展開せずにスクリプトを終了させ、「実行」でチェックが入っている項目の一括展開を行います。
見た目は少し無骨ですが、PCを起動した際に展開したいアプリやフォルダの数が多かったため、こちらのアプリで処理することで手間が大きく減りました。
メモ系だけ、Excel系だけ、と展開したかったことがあったので、チェックボックスで選択可能にしました。
のちほど紹介するコードを書き換えることで、任意のアプリ・フォルダ・ファイルを展開可能です。
1-1. 改善したい点
- 起動する順番を指定したい。
→現状は、起動する順番は指定できないため、タスクバーのタブの順番を気にする場合は並び替える必要がある。 - 全て展開したことをプログラム内で確認して自動でプログラムを終了させたい。
→現状は、目視で全てのプログラムが起動されていることを確認してからプログラムを終了させなければならない。 - チェックが入っていても、右上の×ボタンをクリックした場合は展開せずにプログラムを終了させたい。
→現状は、右上の×ボタンをクリックした場合はチェックが入っていると展開してしまう。
改善出来たら修正したコードを公開したいと思います。
2. チェックボックスを利用したtkinterの大枠の作成

こちらのサイトを参考にさせていただき、チェックボックスを利用したtkinterの大枠の作成を行いました。

1つのボタンでチェックをすべて外したり付けたりしたかったので、こちらのサイトを参考に実装しました。
3. 現在利用可能なフォントの一覧を取得
1 2 3 4 |
import tkinter import tkinter.font as font root = tkinter .Tk() print(font.families()) |
上記のコードをそのままコピーペーストしてPycharmで実行することで、現在利用可能なフォントの一覧を取得可能です。
Pycharmに出力されるフォント名はこのようなコピーが可能なテキストで出力されます。
使用したいフォント名をここからコピーして、後述するコードの指定箇所にペーストすれば「tkinter」のウィンドウで表示される文字列に適用可能です。
私は個人的に「BIZ UDゴシック」が好きなので、今回はそちらを利用しました。
こちらのサイトを参考にさせていただきました。
https://shizenkarasuzon.hatenablog.com/entry/2018/12/31/064646
4. フォントオブジェクトを新規に作成
ボタンそれぞれに何度もフォント設定を記載するのは面倒なので、フォントオブジェクトを先に作成し、それをそれぞれのボタンに適用します。
「family=”System”」の「System」に利用したいフォント名を入れることで、任意のフォントが利用可能になります。
この方法はこちらのサイトを参考にさせていただきました。
http://memopy.hatenadiary.jp/entry/2017/06/11/112619
フォントオブジェクトによる設定
フォントオブジェクトというものを新規に作成することもできる。
※python3で作成import tkinter as tk
import tkinter.font as fontroot = tk.Tk()
# my_fontというフォントオブジェクトを新規に作成
my_font = font.Font(root,family=”System”,size=20,weight=”bold”)# fontオプションでmy_fontを設定する
button = tk.Button(root,text=”font”,font=my_font)
button.pack()root.mainloop()
5. コード
こちらのコードはフォルダなどのフルパスを書き換えればPycharmなどでそのまま実行可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import subprocess import tkinter.font import sys # Tkクラス生成 tki = tkinter.Tk() # 画面サイズ tki.geometry('300x400') # 画面タイトル tki.title('一括展開') # フォントオブジェクトを新規に作成 my_font = tkinter.font.Font(tki,family='BIZ UDゴシック',size=16) # チェックボタンのラベルをリスト化する chk_txt = ['秀丸メモ系','Excel系','一時的なメモ','フォルダ系','プログラム系'] # チェックボックスON/OFFの状態 chk_bln = {} # チェックボタンを動的に作成して配置 for i in range(len(chk_txt)): chk_bln[i] = tkinter.BooleanVar() chk = tkinter.Checkbutton(tki, variable=chk_bln[i], text=chk_txt[i], font=my_font) chk.place(x=50, y=20 + (i * 35)) # ボタンクリックイベント(チェック初期値をセット) def btn_click(bln): for i in range(len(chk_bln)): chk_bln[i].set(bln) # ボタン作成 btn = tkinter.Button(tki, text='全てにチェックを入れる', command=lambda:btn_click(True), font=my_font) btn.place(x=40, y=210) btn = tkinter.Button(tki, text='全てのチェックを外す', command=lambda:btn_click(False), font=my_font) btn.place(x=40, y=252) btn = tkinter.Button(tki, text="キャンセル", command=sys.exit, font=my_font) btn.place(x=40, y=294) btn = tkinter.Button(tki, text="実行", command=tki.destroy, font=my_font) btn.place(x=40, y=336) # イベントループ開始 tki.mainloop() # チェック判定して展開 if chk_bln[0].get(): # 秀丸メモ系 open_dir = r'テキストファイルのフルパス' subprocess.Popen(['start', '/MAX', open_dir], shell=True) if chk_bln[1].get(): # Excel系 open_dir = r'Excelファイルのフルパス' subprocess.Popen(['start', '/MAX', open_dir], shell=True) if chk_bln[2].get(): # 一時的なメモ open_dir = r'メモ帳で開くファイルのフルパス' subprocess.Popen(['start', open_dir], shell=True) if chk_bln[3].get(): # フォルダ系 open_dir = r'フォルダのフルパス' subprocess.Popen(['explorer', open_dir], shell=True) if chk_bln[4].get(): # プログラム系 open_dir = r'プログラムのフルパス' subprocess.Popen([open_dir], shell=True) |
あまり関係はありませんが、私の場合は、秀丸で開くテキストファイルと、Windows付属のメモ帳で開くテキストファイルの拡張子を別にしてそれぞれ関連付けしているため、2種類のテキストエディタでテキストファイルを開いています。
「subprocess.Popen([])」の引数はそれぞれ
「’/MAX’」→最大化して起動させます。
「’explorer’」→エクスプローラー(開くプログラムを指定)で指定のフォルダを開かせます。
を意味しています。
プログラムを起動させる場合はプログラムのフルパスのみで起動可能です。
分からないところがありましたら、ご連絡頂ければ出来る限りご対応させていただきます。
ご参考になれば幸いです。
コメント