【Python】tkinterでGUIを作成する

Python

こんにちは、しらすです。

これまでずっとコマンドラインから実行するようなコードばかり作成していましたが、作成したツールを使ってもらおうとしたらGUIがあるととても分かりやすい!ということでGUIを作成することにしました。

色々調べると、tkinterというツールがよさそう!ということで作ってみました。

一度作っておけば、あとはツールごとに微修正すればよいだけなので、興味がある方は是非一度お試しください。コピペで済むので、作成からプログラムへの接続まで15分くらいでできました。

完成した画面は以下。

以下、プログラムを記載します。

# -*- coding: UTF-8 -*-
from tkinter import *
from tkinter import filedialog
import threading, os

"""""""""""""""""""""""""""""""""
基本処理
"""""""""""""""""""""""""""""""""
class FunctionSample():
    def __init__(self, tkinterController):
        print('ここに処理を書く')
        
"""""""""""""""""""""""""""""""""
Tkinterのメインフレーム
"""""""""""""""""""""""""""""""""
class Application(Frame):
    def __init__(self, master):
        super().__init__(master)
        self.master.geometry("450x120")
        self.master.title("Buyma自動出品")
        self.th=threading.Thread(target=self.searchQuery)
        self.make()

    def make(self):
        # フレーム生成
        ctlfr = Frame(self.master)
        ctlfr.pack(anchor=W, padx=5)

        # ログインID
        label1 = Label(ctlfr, text="ログインID",width=20)
        label1.grid(row=0, column=0, padx=5, pady=5)
        self.entry1 = Entry(ctlfr)
        self.entry1.grid(row=0, column=1, padx=5, pady=5)
        self.entry1.focus()

        # パスワード
        label2 = Label(ctlfr, text="パスワード")
        label2.grid(row=1, column=0, padx=5, pady=5)
        self.entry2 = Entry(ctlfr)
        self.entry2.grid(row=1, column=1, padx=5, pady=5)
        self.entry2.focus()

        # ラジオボタン
        self.var = IntVar()
        self.var.set(0)
        self.rad1 = Radiobutton(ctlfr, text="Windows", value=0, variable = self.var)
        self.rad1.grid(row=0, column=2, padx=5, pady=5, sticky = W)
        self.rad2 = Radiobutton(ctlfr, text="Mac", value=1, variable = self.var)
        self.rad2.grid(row=0, column=3, padx=1, pady=5, sticky = W)

        #入力ファイル開くボタン
        self.btn2 = Button(ctlfr, text="入力ファイルを開く", command=self.inputFromCSV)
        self.btn2.grid(row=3, column=0, padx=0, pady=0)
        self.entry3 = Entry(ctlfr)
        self.entry3.grid(row=3, column=1, padx=5, pady=5)

        #実行ボタン
        self.btn1 = Button(ctlfr, text="実行", command=self.start)
        self.btn1.grid(row=3, column=2, padx=5, pady=5)
        self.btn3 = Button(ctlfr, text="終了", command=self.master.quit)
        self.btn3.grid(row=3, column=3, padx=1, pady=5, sticky = W)

    def searchQuery(self):
        tb = FunctionSample(self)
    
    def start(self):
        if self.entry1.get() != "":
            self.btn1["state"] = DISABLED
            self.btn2["state"] = DISABLED
            self.btn3["state"] = DISABLED
            self.entry1["state"] = DISABLED
            self.entry2["state"] = DISABLED
            self.entry3["state"] = DISABLED
            self.th.start()
   
    #完了時処理
    def finished(self):
        self.th = None
        self.th = threading.Thread(target=self.searchQuery)
        self.btn1["state"] = NORMAL
        self.entry1["state"] = NORMAL

    #CSVを開いてフィールドに格納
    def inputFromCSV(self):
        fTyp = [("CSV File", "*.csv")]    
        iDir = os.path.abspath(os.path.dirname(__file__))
        path = filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir, defaultextension="csv")
        self.entry3.insert(END, path)

"""""""""""""""""""""""""""""""""
main
"""""""""""""""""""""""""""""""""
def main():
    win = Tk()
    app = Application(win)
    app.mainloop()
    
if __name__ == "__main__":
    main()

ちなみに、こちらのGUIを接続して作成したBuyma自動出品ツールは以下の記事で紹介しております。

コメント