【Python/tkinter】枠線(relief)の種類一覧

tkinterのウィジェットのButtonやFrame、Labelなどで設定できる枠線(relief)の種類ですが、

  • RAISED
  • GROOVE
  • SUNKEN
  • RIDGE
  • FLAT
  • SOLID

の6種類設定出来るのは、調べれば簡単に出てきますが、どれがどれ?と、いつもなってしまうので、一覧を示します。

サンプルコード

import tkinter as tk

root = tk.Tk()
root.geometry("300x320") 

# ボタンの作成
button1 = tk.Button(
    root, text="tk.RAISED", relief=tk.RAISED, bd=5, width=20)
button2 = tk.Button(
    root, text="tk.GROOVE", relief=tk.GROOVE, bd=5, width=20)
button3 = tk.Button(
    root, text="tk.SUNKEN", relief=tk.SUNKEN, bd=5, width=20)
button4 = tk.Button(
    root, text="tk.RIDGE", relief=tk.RIDGE, bd=5, width=20)
button5 = tk.Button(
    root, text="tk.FLAT", relief=tk.FLAT, bd=5, width=20)
button6 = tk.Button(
    root, text="tk.SOLID", relief=tk.SOLID, bd=5, width=20)

# 配置
button1.pack(pady=10)
button2.pack(pady=10)
button3.pack(pady=10)
button4.pack(pady=10)
button5.pack(pady=10)
button6.pack(pady=10)

root.mainloop()

【参考文献】OpenCVではじめよう ディープラーニングによる画像認識

4月8日、OpneCVではじめよう ディープラーニングによる画像認識 という本のKindle版が先行して発売されました。(単行本は4月30日発売)

 

この本はOpenCV界隈では有名な二人(実名なので認識しづらいですが)がタッグを組んで書かれた本なので、買わない訳にはいきませんww

この本の対象者としては、PythonのOpenCVで画像処理をしてきて、ディープラーニングの処理もOpenCVで動かしてみたい!という人向けです。

 

Pythonの文法やディープラーニング処理のアルゴリズム的な部分は書かれていません。

逆にディープラーニング処理を行うために必要になるOpenCV処理の説明などは割と細かく書かれています。

おそらく実際に手を動かして確認したであろう内容も含まれているので、その辺はOpenCVをやった事のある人でも参考になると思います。

全体的には、OpenCVに関する内容が半分、残りがディープラーニングに関する内容になっています。

 

サンプルプログラムもソースコードはgithubから、学習済みモデルは出版社のページからダウンロードできるので、比較的簡単にお試しができると思います。

本に書かれているサンプルを使って、こんなプログラムを簡単に動かす事ができました。

ただ、ファイルの読み込み時にフルパス設定になっていたので、パスの中に日本語が入っていてファイルが読み込めないというエラーに少しはまりました。→パスを相対パスにして動作させました。

 

私はKindle版を購入しましたが、参考文献などのリンクは、Kindleからリンクを貼ってあるので便利でした。

Kindle版をPCで見るときは、フォントのサイズやページの幅を調整すると見やすくなります。

 

目次

1章 OpenCVとは
1.1 OpenCVの概要
1.2 主要モジュール
1.3 OSSライセンス
1.4 サポート言語
1.5 サポートプラットフォーム
1.6 高速化
1.7 開発の歴史
1.8 ブランチ管理
1.9 各種サイト

2章 OpenCVインストール
2.1 OpenCVのインストール
2.2 pip
2.3 Miniconda
2.4 Docker
2.5 ソースコード

3章 coreモジュール
3.1 基本処理
3.2 ピクセルごとの操作
3.3 統計情報の取得
3.4 画像の分割、結合
3.5 ユーティリティ

4章 imgprocモジュール
4.1 画像の前処理と後処理
4.2 色の変換
4.3 しきい値処理(2値化)
4.4 画像の幾何変換

5章 imgcodecs、Videoioモジュール
5.1 画像の読み込み
5.2 画像の書き込み

6章 ディープラーニング
6.1 ディープラーニングの概要
6.2 精度評価
6.3 画像処理におけるディープラーニング

7章 dnnモジュール基礎
7.1 dnnモジュールの概要
7.2 顔検出
7.3 オブジェクト検出
7.4 クラス分類
7.5 セグメンテーション
7.6 テキスト検出とテキスト認識
7.7 キーポイント検出

8章 dnnモジュール応用
8.1 dnnモジュールの対応レイヤ
8.2 カスタムレイヤ対応
8.3 学習済みモデルの診断ツール(model-diagnostics)
8.4 外部DNNフレームワーク連携
8.5 学習済みモデルの利用

【Python/tkinter】ウィンドウ(Frame)のxボタンがクリックされたときの終了確認

TkinterのFrameで作成したウィンドウのxボタンをクリックしたときに、終了確認を表示して、プログラムを閉じる/閉じないを選択する方法です。

 

まず、何もしないウィンドウを表示するだけのベースとなるプログラムから手を加えていきます。

 

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)

        self.master.geometry("300x300")       # ウィンドウサイズ(幅x高さ)

if __name__ == "__main__":
    root = tk.Tk()

    app = Application(master = root)
    app.mainloop()

(実行結果)

ここに、以下の一文を追加し、xボタンが押されたときに呼び出される関数を指定します。

関数名は何でも構いません。

self.master.protocol("WM_DELETE_WINDOW", self.delete_window)

全、コードはこちら

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)

        self.master.geometry("300x300")       # ウィンドウサイズ(幅x高さ)

        # ウィンドウの x ボタンが押された時に呼ばれるメソッドを設定
        self.master.protocol("WM_DELETE_WINDOW", self.delete_window)

    def delete_window(self):
        print("ウィンドウのxボタンが押された")
        pass

if __name__ == "__main__":
    root = tk.Tk()

    app = Application(master = root)
    app.mainloop()

このようにすると、delete_window()メソッドの部分で、printしているだけで特に何もしていないので、xボタンが押されても、ウィンドウが閉じられないプログラムとなります。

xボタンが押されたときにプログラムの終了確認を行うには、このメソッド内で行います。

終了確認を行うプログラムはこちら↓

import tkinter as tk
from tkinter import messagebox

class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)

        self.master.geometry("300x300")       # ウィンドウサイズ(幅x高さ)

        # ウィンドウの x ボタンが押された時に呼ばれるメソッドを設定
        self.master.protocol("WM_DELETE_WINDOW", self.delete_window)

    def delete_window(self):
        print("ウィンドウのxボタンが押された")

        # 終了確認のメッセージ表示
        ret = messagebox.askyesno(
            title = "終了確認",
            message = "プログラムを終了しますか?")

        if ret == True:
            # 「はい」がクリックされたとき
            self.master.destroy()

if __name__ == "__main__":
    root = tk.Tk()

    app = Application(master = root)
    app.mainloop()

(実行結果)

delete_window()メソッド内で何もしなければ、ウィンドウは閉じられません。

プログラムを終了するには、明示的にdestroy()メソッドを呼び出して、プログラムを終了させる必要があります。