見出し画像

Tkinter 私の実績 A1

Tkinter に挑戦していましたが、私に必要な機能は使えるようになったつもりで居ます。(初回作を社内リリースしました。)

前回の記事は [余談] の扱いでしたが、Tkinter をこれからも使うことに成りそうなので、私が理解して結果を確認した使い方を紹介して行きたいと思います。

それ程複雑なものは作れませんが、以前に紹介した「バーコード・コマンド表作成省力化」のように、中小企業の現場でもGUIによるアプリケーションを活用したい場面があると思います。私自身も小規模なアプリケーションで生産性を高めることが出来れば有難いと思います。

バーコード・コマンド表作成省力化」は、Tkinter で記述したプログラムがQRコードを生成してExcelに貼り付ける関数を呼ぶ程度で、GUI側主導のものですが、別途動作を記述したプログラムが主体となって Tkinter をマン・マシンI/Fとして使う場面もありそうです。

B01 やケースはハードウェアで作ったマン・マシンI/Fですが、Tkinter等で作るのはソフトウェアで作るマン・マシンI/Fと言ったイメージです。

小規模で飾らない範囲ですが、これから少しづつ試したものを紹介する予定です。

Window と Frame

初回なので、Web検索すれば沢山みつけられる情報ですが、複数のFrameを持つWindowを表示するだけのプログラムです。

今後 Frameに要素を追加して行く予定です。

ソース

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk

class Application(tk.Frame):
   def __init__(self,master):
       super().__init__(master)
       self.master.geometry("400x300")     # pixcel 単位で 横x縦 の大きさ指定
       self.master.title("Tkinter with Class (uPyC)")  # タイトル指定
       self.place()            # masterインスタンスを配置
       
       self.create_widgets()   # master の要素を指定

   def create_widgets(self):
       # フレーム1の作成 (上)**************************************************
       frame1 = tk.Frame( # frame1インスタンスを作成
           self.master, # self.master要素であるウィンドウを指定
           background="snow", # 背景色を指定
           borderwidth=0, # ボーダーの幅を指定
           #relief="sunken", # ボーダーの浮き彫りを指定
           width=400, # 幅をpixel単位で指定
           height=200, # 高さをpixel単位で指定
           )
       # ここから frame1 の要素を記述
       # 以上 frame1 の要素
       frame1.place(x=0,y=0)       # frame1インスタンスを配置  pixcel 単位で位置指定

       # フレーム2の作成 (上右)**************************************************
       frame2 = tk.Frame( # frame1インスタンスを作成
           self.master, # self.master要素であるウィンドウを指定
           background="light sky blue", # 背景色を指定
           borderwidth=0, # ボーダーの幅を指定
           #relief="sunken", # ボーダーの浮き彫りを指定
           width=400, # 幅をpixel単位で指定
           height=100, # 高さをpixel単位で指定
           )
       # ここから frame2 の要素を記述
       # 以上 frame2 の要素
       frame2.place(x=0,y=200)     # frame2インスタンスを配置  pixcel 単位で位置指定 

def main():
   
   root = tk.Tk()                  # Tk のインスタンスを生成
   app = Application(master=root)  # Application クラスの継承!
   app.mainloop()                  # app に制御を渡す
   
if __name__ == "__main__":
   main()

解説

コメントにしている内容がほぼ全てですが、以下捕捉します。

def main()
この3行でTkinterを走らせています。
.mainloop の行に続けて何かを書いても、GUIが終了するまで実行されません。(でした)

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

Windowと言うかFrameの大親分を記述しています。
大きさとタイトルを指定して、配置します。
配置については pack , grid と言った指定方法もあるようですが、私は place の方がpixcel 単位で指定出来る分、直感的で自由度が高いと感じています。

def create_widgets(self):
ここにWindowの要素を記述しています。
今回は色違いのフレームを2つだけです。
frame1 が背景色が白(snow)で400x200 pixcel、Window内のx=0,y=0に左肩を位置付けます。
frame2 が背景色 lite sky blue で400x100 pixcel、Window内のx=0,y=100に左肩を位置付けています。
どちらのフレームも最後にplace で配置を決めています。

今回は縦に並べましたが、横にも並べられます。
また、縦横混在も可能です。
(例:横並び2つのフレームの下に全幅のフレームを配置)


次回以降、フレームの要素を追加して行く予定です。


何等かお役に立てれば幸いです。

私の認識違いなどありましたら、教えていただけると助かります。

宜しくお願い致します。



出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。