サーバレス練習帳

着眼大局着手小局

【python】TKinterでGUIを作ってみます!

⇒ いろいろ試したのですが、非同期がダメだったりタスクトレイ常駐の難易度が高かったりということが分かったので、別の方法を考えます!でも、同期実行には強そうだね。

◆ステップ1:まずはキホンから!
簡単じゃん!思ったより使いやすいよ!
python.keicode.com

◆ステップ2:絵を貼りつける
gifなら簡単に読んでくれるんですが、pngやjpgの場合はpillowを使う必要があります。

pip install pillow
from PIL import Image, ImageTk
imageFile = Image.open(IMG_ROBOT)
imageData = ImageTk.PhotoImage(imageFile)


◆ステップ3:非同期でtkinterの画面を呼び出す
やろうとしたところ、次のようなことが書いてありました。tkinterダメじゃん。。。もうっ!

色々調べた所、tkinterはメインプロセス(メインスレッド)以外でmainloopを読んではいけないらしいので、pyqtを使ったらGUIのmainloopをサブプロセスで起動することができました。

teratail.com

◆ステップ4:タスクトレイ常駐とも相性が悪そう
qiita.com


◆とりあえず、ステップ2までの制作物です
・・・まだ見た目がイケてないな。。。

from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk

IMG_ROBOT = './robot.jpg'

def close_window(root): 
    root.destroy()

def showAssistStart():

	root = Tk()
	root.title('Robot Assistant')
	root.geometry('200x300')
	frame01 = ttk.Frame(root)
	imageFile = Image.open(IMG_ROBOT)
	imageData = ImageTk.PhotoImage(imageFile)
	label02 = ttk.Label(root, image=imageData)
	label01 = ttk.Label(frame01, text='アシスト対象ページです!')
	button01 = ttk.Button(frame01, text='OK',command = lambda: close_window(root))


	frame01.grid(row=0,column=0,sticky=(N,E,S,W))
	button01.grid(row=2,column=1,sticky=W)
	label01.grid(row=1,column=1,sticky=E)
	label02.grid(row=2, column=0)
	
	for child in frame01.winfo_children():
		child.grid_configure(padx=5, pady=5)

	root.mainloop()
	return True

if __name__ == '__main__':
	showAssistStart()