「日経ソフトウェア2022年9月号 特集2 Python デスクトップアプリを作ろう」をやってみた その1

日経ソフトウェア2022年9月号 特集2 Python デスクトップアプリを作ろう」を実行してみました。

 

サンプルプログラム

サンプルプログラムは日経ソフトウェアのWebからダウンロードできます。

以下URLから「本誌バックナンバーを見る」→「2022年9月号」→「「特集2 Pythonでデスクトップアプリを作ろう 前編」(t22209.zip)

 

nkbp.jp

 

 

PART1 TKinterの基本をマスターしよう

TKinterPythonに標準で付属するGUIライブラリです。

TKinterが用意しているウィジェットは以下になります。

ウィジェットとはここでは、「画面上に表示できるもの」という意味で使用しています。

 

ウィジェット 説明
Button ボタン
Canbas 描画領域
Checkbutton チェックボックス
Combobox コンボボックス
Entry テキストボックス
Frame フレーム(四角いコンテナ)
Label ラベル(1行テキスト)
Labelframe ラベル付きのフレーム
Text テキストボックス(複数行入力)
Listbox リストボックス
Menubutton プルダウンメニュー
Radiobutton ラジオボタン
Notebook タブ切り替え可能なページ
Scale スライドバー
Scrollbasr スクロールバー
Spinbox Entryに値を増減させるスピンボタンがついたもの
Menu ウィンドウメニュー
PreGressbar プログレスバー
Separator 境界線
Treeview ツリー

 

テキストボックスを持つウィンドウを表すプログラムです。

Entry(テキストボックス)を作成し、記入できる文字数を引数で渡しています。

pack関数使用してテキストボックスを配置します。pady=50は縦方向に50ピクセル余白をとることを表しています。

import tkinter as tk
# ウインドウ(トップレベルTkウィジェット)を生成
root = tk.Tk()
# ウインドウの中身の大きさを指定
root.geometry('300x150')

# Entryウィジェットの生成と配置
txt = tk.Entry(width=20)
txt.pack(pady=50)

# ウインドウの子ウィジェットを表示
print(root.children)

# ウインドウを表示
root.mainloop()

 

実行するとウィンドウが起動します。

テキストボックス

イベント駆動型のプログラミング

「マウスボタンが押された」「キー入力があった」といったユーザーの操作をイベントと呼んでいます。

 

イベント駆動例です。

ウィンドウにテキストボックスを作成するところまでは、先ほどと同じです。

ハンドラ関数は、

・イベントが発生するとテキスト情報をGETし、メッセージと表示したメッセージボックスを表示する という内容です。

 

Labelは「赤い文字で『ここをクリック』と表示」し、pack()関数で配置します。

<Button-1>は左クリックのイベントを表し、bindで<Button-1>と"click"を関連付けしています。

「labelが左クリックされるとclick関数に飛ぶ」という記述です。

 

import tkinter as tk
from tkinter import messagebox

root = tk.Tk()
root.geometry('300x150')

txt = tk.Entry(width=20)
txt.pack(pady=50)

# ハンドラ関数
def click(event):
  messagebox.showinfo('メッセージ', txt.get())

# Labelウィジェットの生成
label = tk.Label(root,
                 text='ここをクリック',
                 foreground='red')

# Labelウィジェットの配置
label.pack()
# ハンドラ関数を設定
label.bind("<Button-1>", click)

print(root.children)

root.mainloop()

 

テキストボックスに文字を入力し赤い「ここをクリック」実行するとメッセージが別ウインドウに表示されます。

イベント

 

ウィジットの配置

ウィンドウのどこに配置するかは、pack関数実行時にside という引数でそれぞれの位置に配置することができます。

import tkinter as tk

root = tk.Tk()
root.geometry('300x150')

label_top = tk.Label(root, text='TOP')
label_bottom = tk.Label(root, text='BOTTOM')
label_left = tk.Label(root, text='LEFT')
label_right = tk.Label(root, text='RIGHT')

label_top.pack(side=tk.TOP)
label_bottom.pack(side=tk.BOTTOM)
label_left.pack(side=tk.LEFT)
label_right.pack(side=tk.RIGHT)

root.mainloop()

 

実行結果

配置

 

 

 

 

 

 

/* -----codeの行番号----- */