「PythonでGUIアプリ開発」に挑戦!Tkinter/Ttk編 その12
「PythonでGUIアプリ開発」に挑戦!Tkinter/Ttk編 その12ステップ01 ウインドウを表示するステップ02 ボタンでメッセージボックスステップ03 クラスでコーディングを楽にステップ04 「終了」メニューを作ろうステップ05 必須の「バージョン情報」ステップ06 ヘルプはWebサイトに置くステップ07 Textで複数行の処理ステップ08 スクロールバーを付けようステップ09 ウインドウの大きさを取得ステップ10 INIファイルに設定を保持ステップ11 空のメニュー項目を作るステップ12 ファイル処理を実装するおまけ .pyファイルのexe化## ステップ10 INIファイルに設定を保持# 『日経ソフトウエア』2021年9月号「特集1 PythonでGUIアプリ開発」の基礎(p.14~p.15)## リスト12 TextEdit10.py# クライアント領域の大きさwpTextEdit.iniに保存する。# # リスト11に付け加えた部分は、(0)から(4)# モジュール(tkinter)のインポートfrom tkinter import *# モジュール(messagebox, ttk)のインポート# messageboxモジュール:メッセージボックスを表示するfrom tkinter import messagebox, ttk# webbrowserモジュールをインポートするimport webbrowser# (a)ScrolledTextモジュールをインポートするfrom tkinter.scrolledtext import ScrolledText# (0)configparserモジュールをインポートするコードを追加。import configparser# 「TextEdit」クラスの定義class TextEdit: def __init__(self, root): root.title(self.__class__.__name__) root.geometry('300x50') # メニューの切り離し(tear off)を禁じるコード root.option_add('*tearOff', FALSE) # Menuクラスのインスタンスを生成し、名前「menu」で参照可能にする menu = Menu(root) # もう一つMenuクラスのインスタンスを生成し、名前「menuFile」で参照可能にする menuFile = Menu(menu) # menuの「add_cascade」メソッドを呼び出し、menu・label・underlineオプションを指定する # menuオプションに、「menuFile」を指定 # labelオプションに、メニューとして表示する文字列「ファイル(F)」を指定する。 # underlineオプションは、文字列の何番目に下線を引くかを設定するもので、 # 「F」は文字列「ファイル(F)」の6番目であるため、「5」(最初の文字が「0」)を設定。 menu.add_cascade(menu=menuFile, label='ファイル(F)', underline=5) # menuFileにコマンド「終了(X)」を追加 menuFile.add_command(label='終了(X)', underline=3, command=self.menuFileExit) # もう一つMenuクラスのインスタンスを生成し、名前「menuHelp」で参照可能にする menuHelp = Menu(menu) # menuの「add_cascade」メソッドを呼び出し、menu・label・underlineオプションを指定する # menuオプションに、「menuHelp」を指定 # labelオプションに、メニューとして表示する文字列「ヘルプ(H)」を指定する。 # underlineオプションに、「H」に下線を引くため、「H」は文字列「ヘルプ(H)」の5番目なので、「4」を設定。 menu.add_cascade(menu=menuHelp, label='ヘルプ(H)', underline=4) # menuHelpにコマンド「Webサイトを開く(W)」を追加 menuHelp.add_command(label='Webサイトを開く(W)', underline=10, command=self.menuHelpOpenWeb) # 区切り線(セパレーター)を表示するコード menuHelp.add_separator() # menuHelpにコマンド「バージョン情報(V)」を追加 menuHelp.add_command(label='バージョン情報(V)', underline=8, command=self.menuHelpVersion) root['menu'] = menu # (b)Textウィジェットのインスタンスを作成し、textという名前で参照できるようにする。 text = ScrolledText(root) # textのpackメソッドを呼び出す。 # expandオプションを1に、fillオプションをBOTHに設定 # このような設定にしないと、ウインドウの大きさを変えた時に、テキスト領域がクライアント領域いっぱいに広がらない。 text.pack(expand=1, fill=BOTH) # def menuFileExit(self): # (1)ConfigParserクラスのインスタンスを生成し、cpという名前で参照できるようにする。 cp = configparser.ConfigParser() # (2)「Client]というセクションに「Height」というキーを作り、その値としてクライアント領域の高さを文字列にしたものを与える。 # 同じセクションに「Width」というキーを作り、その値としてクライアント領域の幅を文字列にしたものを与える。 cp['Client'] = { 'Height': str(root.winfo_height()), 'Width': str(root.winfo_width())} # (3)「TextEdit.」というファイルを書き込み可能にして開き、それをconfigfileという名前で参照できるようにし、configfileにデータを書き込む。 with open(self.__class__.__name__ + '.ini', 'w') as f: cp.write(f) # (4)プログラムを終了する。 root.destroy() # 「Webサイトを開く(W)」メニューの処理 def menuHelpOpenWeb(self): #変数sを宣言し、そこにクラス名「TextEdit」を入れる webbrowser.open( 'https://info.nikkeibp.co.jp/media/NSW/') # バージョン情報メニューの処理 def menuHelpVersion(self): # 変数sを宣言し、そこにクラス名「TextEdit」を入れる s = self.__class__.__name__ # バージョン番号(0.01)、年月日、改行(\n) s += ' Version 0.01(2021/03/10)\n' # 著作権表記 s += ' ©2021 Hideo Harada\n' # Pythonのシステム情報 s += 'with Python ' + sys.version # 変数sに格納された文字列をメッセージボックスに表示する messagebox.showinfo( self.__class__.__name__, s) # #def menuHelpExit(self): #root.destroy() # 「root」root = Tk()TextEdit(root)# root.mainloopの開始root.mainloop()リスト12(TextEdit10.py)実行結果ウインドウの大きさを変えると、高さと幅の値も変化している。