0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

tkinterを使ってテキストエディタのアプリを作ってみた ~PART2~

Posted at

前回はアプリの概要とプログラム全体を掲載しましたので、今回は詳細についての解説をしていきたいと思います。まずはメインウインドウから。
image.png
メインウインドウのFixed Phraseボタンを押下すると、サブウインドウが立ち上がります。プログラムの記述としては、サブウインドウからとなっておりますので、サブウインドウから順を追って説明します。
image.png
まずはSaveボタンの関数から解説します。

# インポート
import tkinter as tk
from tkinter import ttk
import configparser
from tkinter import filedialog

# configparserのインスタンス化
config = configparser.ConfigParser()
# 読み込む設定ファイルを指定
config.read("setting.ini")

### 関数 ###
def sub_window():
    ### 関数(sub_window) ###
    #設定ファイルへ保存
    def writing_func():
        with open("setting.ini","w") as file:
            config.write(file)
    # Save
    def reg_func():
        # エントリーボックスの値を取得
        reg_phrase = reg_box.get()    //テキストボックス内の値を取得し
                                                      reg_phrase変数に格納
        # 定形文の登録                    
        if radio_value.get() == 1:
            rdio_1["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase1",reg_phrase)
            writing_func()
        elif radio_value.get() == 2:
            rdio_2["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase2",reg_phrase)
            writing_func()
        elif radio_value.get() == 3:
            rdio_3["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase3",reg_phrase)
            writing_func()
        elif radio_value.get() == 4:
            rdio_4["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase4",reg_phrase)
            writing_func()
        elif radio_value.get() == 5:
            rdio_5["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase5",reg_phrase)
            writing_func()

    //ifの分岐処理は選択されたラジオボタンの値を書き換える
                 または新しくフレーズを記憶するための処理

このreg_func関数がSaveボタン押下時の処理となります。次にSetボタン押下時の処理を解説します。

    # Set
    def insert_func():
        # テキストボックスへ定形文の挿入
        if radio_value.get() == 1:
            txtbox.insert("insert",rdio_1["text"])
        elif radio_value.get() == 2:
            txtbox.insert("insert",rdio_2["text"])
        elif radio_value.get() == 3:
            txtbox.insert("insert",rdio_3["text"])
        elif radio_value.get() == 4:
            txtbox.insert("insert",rdio_4["text"])
        elif radio_value.get() == 5:
            txtbox.insert("insert",rdio_5["text"])

//メインウインドウのテキストボックスにラジオボタンにて選択された値を挿入する
 insert_func関数をSetボタン押下時に動かします

次にサブウインドウのGUIを解説していきます。

    ### GUI(sub_window) ###
    # サブウィンドウの作成
    fp_window = tk.Toplevel(root)
    # ラベルフレーム1
    frame1= ttk.Labelframe(fp_window,text = "Registration",
                          padding = 10)
    frame1.pack(padx = 20,pady = 10)
    # ラベル
    reg_label1 = tk.Label(frame1,text = "Fixed Phrase: ")
    reg_label1.pack(side = tk.LEFT,anchor = tk.W)
    # 定形文入力欄
    reg_box = tk.Entry(frame1,width = 50)
    reg_box.pack(side = tk.LEFT)
    # 保存ボタン
    save_button = tk.Button(frame1,text = "Save",command = reg_func)
    save_button.pack(padx = 10,side = tk.LEFT)
//Saveボタン押下時のコマンドreg_funcを割り当てます
    # ラベルフレーム2
    frame2 = ttk.Labelframe(fp_window,text = "Save Slot",
                            paddin = 10)
    frame2.pack(padx = 20,pady = 5,fill = tk.X)
    # ラジオボタン
    radio_value = tk.IntVar()
    read_base = config["Fixed Phrase"]
    rdio_1 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase1"),
                            variable = radio_value,value = 1)
    rdio_1.grid(row = 0,column = 0,sticky = tk.W)
    rdio_2 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase2"),
                            variable = radio_value,value = 2)
    rdio_2.grid(row = 1,column = 0,sticky = tk.W)
    rdio_3 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase3"),
                            variable = radio_value,value = 3)
    rdio_3.grid(row = 2,column = 0,sticky = tk.W)
    rdio_4 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase4"),
                            variable = radio_value,value = 4)
    rdio_4.grid(row = 3,column = 0,sticky = tk.W)
    rdio_5 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase5"),
                            variable = radio_value,value = 5)
    rdio_5.grid(row = 4,column = 0,sticky = tk.W)
        # Setボタン
    set_button = tk.Button(fp_window,text = "Set",
                          command = insert_func)
    set_button.pack(padx = 20,pady = 10,ipady = 5,fill = tk.X)
//Setボタンに関数insert_funcを割り当てます

GUIの記述は主に、各コンポーネントの位置、大きさを指定しております。また、各ボタンには、押下時に動く関数を割り当てています。

今回は以上となります。次回はメインウインドウの機能及びプログラムについて解説していきたいと思います。

エンジニアファーストの会社 株式会社CRE-CO H_M

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?