こんにちは、しらすです。
これまでずっとコマンドラインから実行するようなコードばかり作成していましたが、作成したツールを使ってもらおうとしたら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自動出品ツールは以下の記事で紹介しております。
コメント