Pythonã§GUIã©ã€ãã©ãªã¯ã©ããããããïŒ
PythonåŠç¿åå¿è ã®æ¹ã§ãGUIã¢ããªã±ãŒã·ã§ã³ãäœãæã«ãªã¹ã¹ã¡ã®ã©ã€ãã©ãª5ã€ãã玹ä»ããŠããŸããä»åã¯ãTkinterãPySimpleGUI ãKivyãPyQtãwxPythonãã玹ä»ããŠããŸãããPythonã§GUIã©ã€ãã©ãªã«ã¯ãããããç¹åŸŽãããã®ã§æ³šæãå¿ èŠã§ããPythonã¯ãäž»ã«æ©æ¢°åŠç¿ã®ã€ã¡ãŒãžã匷ãã§ãããå®éã«ã¯Webã¢ããªã±ãŒã·ã§ã³ã®äœæãããŒã¿ã®ã¹ã¯ã¬ã€ãã³ã°ãGUIã¢ããªã±ãŒã·ã§ã³ã®äœæãªã©ãæ§ã
ãªã¿ã¹ã¯ãè¡ãããšãã§ããŸãã
ãããã®ã¿ã¹ã¯ãç°¡åãã€å¹ççã«è¡ãã«ã¯ãé©åãªã©ã€ãã©ãªãäžå¯æ¬ ã§ãã
ä»åã¯ãPythonã䜿ã£ãGUIã¢ããªã±ãŒã·ã§ã³ãäœæããéã«ããããã®ã©ã€ãã©ãªãã玹ä»ããŸãã
GUIãšã¯
GUIã¯ãGraphical User Interfaceãã®ç¥ã§èŠèŠçã«æäœããããšãåºæ¥ãUIã®ããšã§ãã
察ããŠãCUIãCharacter User InterfaceããšåŒã°ãããã®ããããããã¯éåžžããã°ã©ãã³ã°ãè¡ãéã«äœ¿çšãããMacã§ããã¿ãŒããã«ãWindowsã§ããã³ãã³ãããã³ãã«çžåœããŸãã
ã€ãŸãããªããæ¥åžžçã«äœ¿çšããŠãããã¹ã¯ããããªã©ã代衚çãªGUIã§ãããšèšããã§ãããã
GUIã䜿ãã¡ãªãã
GUIã䜿ãã¡ãªãããšããŠã¯ãèŠããããšããããšãæããããŸãã
GUIãçºæããããŸã§ãåºæ¬çã«ã³ã³ãã¥ãŒã¿ãŒã¯å
šãŠCUIã§æäœãããŠããŸãããããããã®ç¶æ
ã¯ãšã³ãžãã¢ã®æ¹ã§ããã°éåžžã«äœ¿ããããã§ãããéãšã³ãžãã¢ã®æ¹ã¯éåžžã«äœ¿ãã¥ããã§ãã
ãŸããCUIã§ã³ã³ãã¥ãŒã¿ãŒãæäœããå Žåã«ã¯ãè€æ°ã®ã³ãã³ããå
¥åããå¿
èŠããããŸãã
æ¯åäžèŠåãªå€ãå
¥åããŠå®è¡ããå¿
èŠãããããã°ã©ã ããããšããããå®è¡æã«ã¯éœåºŠåŒæ°ãæžãæããªããã°ãªããŸããããã
ãããã£ãæéãçãããã«ããGUIã¢ããªã±ãŒã·ã§ã³ãäœæããã®ã¯éåžžã«ã¡ãªããã倧ããã®ã§ãã
Pythonã§GUIãäœãããã®ã©ã€ãã©ãª5çš®é¡ã®åŸ¹åºæ¯èŒ
ããã§ã¯ãGUIã©ã€ãã©ãª5çš®é¡ãæ¯èŒããŠãããŸãããããããã©ããªç¹åŸŽãããã®ãå ·äœçã«èŠãŠãããŸããããä»åã¯Python3ç³»ã§ã®åäœãããåæã§é²ããããŸãã
Tkinter
ãTkinterãã¯Pythonã«æšæºçã«çµã¿èŸŒãŸããŠããGUIã©ã€ãã©ãªã§ãã
æšæºã©ã€ãã©ãªã®ããå€éšã®ã©ã€ãã©ãªãå°å
¥ããå¿
èŠããªããPythonã®ç°å¢æ§ç¯ãè¡ã£ãæç¹ã§å©çšããããšãã§ããããšãç¹åŸŽã§ãããŸãã·ã³ãã«ãªææ³ãšèµ·åã®éããè©äŸ¡ãããŠãããPythonã«ããããã£ãšãåºæ¬çãªGUIã©ã€ãã©ãªãšããŠã®ç«ã¡äœçœ®ãç¯ããŠããŸãã
PySimpleGUI
ãPySimpleGUIãã¯ãPythonçšã®ã·ã³ãã«ãªGUIã©ã€ãã©ãªã§ãã
ç°¡åãªã³ãŒãã§çŸããGUIã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããPySimpleGUIã¯åå¿è
ããäžçŽè
ãŸã§ã®ãŠãŒã¶ãŒã察象ãšããŠããŠãé«ãçç£æ§ãšéåžžã«ç°¡åãªåŠç¿æ²ç·ãç¹åŸŽã§ãã
ãŸãWindowsãMacãLinuxãªã©ã®å€æ§ãªãã©ãããã©ãŒã ã§å©çšå¯èœã§ãæ§ã
ãªèŠçŽ ïŒãã¿ã³ãããã¹ãããã¯ã¹ãã¹ã©ã€ããŒãªã©ïŒãçµã¿åãããŠã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãã§ããŸãã
Kivy
ãKivyãã¯ãã¯ãã¹ãã©ãããã©ãŒã 察å¿ã®Pythonçšã®GUIã©ã€ãã©ãªã§ãã
iOSãAndroidãLinuxãWindowsãMacOSãªã©ã®å€æ§ãªãã©ãããã©ãŒã ã«å¯Ÿå¿ããŠããŸãã
ç¬èªã®KVèšèªãæ¡çšããŠãããXMLã®ãããªåœ¢åŒã§ãŠãŒã¶ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããšãã§ããŸãããã®KVèšèªã䜿ãããšã§ãé«éãªã¢ããªã±ãŒã·ã§ã³éçºãå¯èœã«ãªããŸãã
PyQt
ãPyQtãã¯ãPythonã䜿ã£ãŠGUIã¢ããªã±ãŒã·ã§ã³ãäœãããã®ãã¬ãŒã ã¯ãŒã¯ã®1ã€ã§ãã
QtïŒãã¥ãŒãïŒãšãããC++ãèšèªã§æžãããGUIãã¬ãŒã ã¯ãŒã¯ãããããPyQtãã¯ãQtãã®PythonããŒãžã§ã³ã§ãã
å€ãã®ãœãããäœãããŠãããæ¯èŒçã¢ãã³ãªèšèšãšãGUIã®ãã¶ã€ã³ãçŸããäœããããããšãè©äŸ¡ãããŠããŸãã
wxPython
ãwxPythonãã¯ãwxWidgetsããšãããC++ããšæžãããã¯ãã¹ãã©ãããã©ãŒã GUIããŒã«ããããããããwxPythonãã¯ãã®PythonããŒãžã§ã³ã§ãã
æŽç·ŽãããAPIãšè±å¯ãªã©ã€ãã©ãªãç¹åŸŽã§ãããå®å®ããåäœãè©äŸ¡ãããŠããŸãã
ãŸãã©ã€ãã©ãªã®è±å¯ããããæã®èŸŒãã ãã®ãäœãã®ã«ãé©ããŠããŸãã
Pythonã®æšæºGUIã©ã€ãã©ãªãTkinterãã§å®éã«GUIã¢ããªãäœã£ãŠã¿ã
åé
ã§ç޹ä»ããéããPythonã«ã¯æ§ã
ãªGUIã©ã€ãã©ãªãçšæãããŠããŸãã
æ¬é
ã§ã¯ç޹ä»ããGUIã©ã€ãã©ãªã®äžã§ãã£ãšãåºæ¬çãªGUIã©ã€ãã©ãªãTkinterãã䜿ã£ããå®éã«GUIã¢ããªã®ã³ãŒãã解説ããŸãã
ãŸãGUIã®éªšçµã¿ãšããŠããŠã£ã³ããŠãç«ã¡äžããã ãã®ã³ãŒããæžããŠã¿ãŸãããã
ãŠã£ã³ããŠãç«ã¡äžããã³ãŒãã¯ä»¥äžã®éãã§ãã
# ãŠã£ã³ããŠç«ã¡äžã
#--------------------------------
# Tkinterã¢ãžã¥ãŒã«ã®ã€ã³ããŒã
import tkinter
# ãŠã£ã³ããŠïŒãã¬ãŒã ïŒã®äœæ
root = tkinter.Tk()
# ãŠã£ã³ããŠã®ååãèšå®
root.title("demo_Tkinter")
# ãŠã£ã³ããŠã®å€§ãããèšå®
root.geometry("400x400")
# ã€ãã³ãã«ãŒãïŒTKäžã®ã€ãã³ããææããé©åãªåŠçãåŒã³åºãã€ãã³ããã£ã¹ãããã£ïŒ
root.mainloop()

tkinter.TK()ã¡ãœãããåŒã³åºããæ®µéã§ããŠã£ã³ããŠãäœæãã衚瀺ãããŸãã
äžèšã³ãŒãã§ã¯è¡šç€ºããããŠã£ã³ããŠã«ã€ããŠãååãtitle()ã¡ãœããã§æå®ãããŠã£ã³ããŠã®å€§ãããgeometry()ã¡ãœããã§æå®ããŠããŸãã
ãŸããæåŸã®è¡ã«ããmainloop()ã¡ãœããã§ãããããã¯ã€ãã³ãã«ãŒããšåŒã°ãããã®ã§ãããTkinterã®GUIäžã§çºçããã€ãã³ãïŒãŠãŒã¶ããã¿ã³ãã¯ãªãã¯ãããçïŒãææããã€ãã³ãã«å¿ããé©åãªåŠçãåŒã³åºã圹å²ãæ ã£ãŠããŸãã
次ã«ããŠã£ã³ããŠã«æååïŒã©ãã«ïŒã衚瀺ããŠã¿ãŸãããã
# æåå衚瀺
#---------------------------------
import tkinter
root = tkinter.Tk()
root.title("demo_Tkinter")
root.geometry("400x400")
# ã©ãã«ã®äœæ
label = tkinter.Label(root, text="This is the Label.")
#ã©ãã«ã®è¡šç€º
label.grid()
root.mainloop()

äžèšã³ãŒãäžã«ãã©ãã«ã®äœæããšã³ã¡ã³ãããç®æããããŸãããããããŠã£ã³ããŠäžã«æååïŒâThis is the Label.âïŒãäœæããåŠçã§ãã
tkinte.Label()ã®ç¬¬äžåŒæ°ã«ã¯rootãæå®ããŠãããããŒã¯ãŒãåŒæ°textã«ã¯æååãæå®ããŠããŸãã
ããã¯ã第äžåŒæ°ã§æå®ãããã¬ãŒã ã«ãããŒã¯ãŒãåŒæ°textã®æååãäœæããããšããåŠçã«ãªã£ãŠããŸãã
ãã¬ãŒã ãšã¯ãŠã£ã³ããŠã®æ ã®ããšã§ãããäžèšã³ãŒãäžã§ã¯ãã£ãšãå€åŽã®æ ãšãªããŠã£ã³ããŠããååšããŸããããããã¯å
¥ãåäžã«äœæã»é
眮ããããšãã§ããŸãã
ãã¬ãŒã ãå
¥ãåæ§é ã«ããã³ãŒãã¯ä»¥äžã®éãã§ãã
# å
¥ãåæ§é
#--------------------------
import tkinter
# ãã¬ãŒã ãã®ïŒïŒãŠã£ã³ããŠã»æäžäœãã¬ãŒã ïŒ
frame1 = tkinter.Tk()
frame1.title("demo_Tkinter")
frame1.geometry("400x400")
# ãã¬ãŒã ãã®ïŒïŒåãã¬ãŒã ã»èŠªã«ãã¬ãŒã ãã®ïŒãæå®ïŒ
frame2 = tkinter.Frame(frame1)
# ã©ãã«ãã®ïŒããã®ïŒïŒé
眮å
ïŒãã¬ãŒã ãã®ïŒïŒåãã¬ãŒã ïŒïŒ
label1 = tkinter.Label(frame2, text="This is the Label_1.")
label2 = tkinter.Label(frame2, text="This is the Label_2.")
# ã©ãã«ãã®ïŒïŒé
眮å
ïŒãã¬ãŒã ãã®ïŒïŒãŠã£ã³ããŠã»æäžäœãã¬ãŒã ïŒïŒ
label3 = tkinter.Label(frame1, text="This is the Label_3.")
# ã©ãã«ãã®ïŒããã®ïŒããã¬ãŒã ãã®ïŒã«è¡šç€º
label1.pack(side=tkinter.LEFT)
label2.pack(side=tkinter.RIGHT)
# ãã¬ãŒã ãã®ïŒããã¬ãŒã ãã®ïŒã«è¡šç€º
frame2.grid()
# ã©ãã«ãã®ïŒããã¬ãŒã ãã®ïŒã«è¡šç€º
label3.grid()
frame1.mainloop()

äžèšã³ãŒãã§äœæããããã¬ãŒã ãšã©ãã«ã®æ§æã¯æ¬¡ã®ããã«ãªã£ãŠããŸãã
ã»ãã¬ãŒã ãã®ïŒ
ã»ãã¬ãŒã ãã®ïŒ
ã»ã©ãã«ãã®ïŒ ïŒ ã©ãã«ãã®ïŒ
ã»ã©ãã«ãã®ïŒ
ãã¬ãŒã ãã®2ïŒåãã¬ãŒã ïŒãäœæãããšããäžèšã³ãŒãäžã§ tkinter.Frame(frame1) ãšèšè¿°ããŸããããã®tkinter.Frame() ã®ç¬¬äžåŒæ°ã«ã¯ã芪ãã¬ãŒã ãæå®ããããšãåºæ¥ãŸãã
ä»åã¯ç¬¬äžåŒæ°ã«ãã¬ãŒã ãã®1ïŒãŠã£ã³ããŠïŒãæå®ããçºããã¬ãŒã ãã®2ã¯ãã¬ãŒã ãã®1ã®åãã¬ãŒã ãšããŠäœæãããŠããŸãã
ãŸããã©ãã«ããã¬ãŒã ã衚瀺ãããšãã«ãgrid() ã pack() ãšãã£ãã¡ãœããã䜿çšããŠããŸãããããã®ã¡ãœããã䜿ãããšã§åããŠãäºåã«äœæããã©ãã«ããã¬ãŒã ãå®éã«GUIäžã«è¡šç€ºãããŸãã
GUIäžã«è¡šç€ºããããã®ã¡ãœãã㯠grid() ãš pack() ã®ä»ã« place() ãšããã¡ãœãããçšæãããŠãããããã衚瀺ã¡ãœããããšã®éãã¯æ¬¡ã®ããã«ãªã£ãŠããŸãã
- pack()
ãã¬ãŒã äžã«èŠçŽ ãäžæ¬¡å çã«é 眮ããïŒè¡ã®ã¿æå®å¯èœãæå®ããªãå Žåã¯æšª1è¡ããšã«èŠçŽ ãé 眮ïŒã - grid()
ãã¬ãŒã äžã«èŠçŽ ãäºæ¬¡å çã«é 眮ããïŒè¡ãšåãæå®å¯èœãæå®ããªãå Žåã¯çžŠ1åæšª1è¡ããšã«èŠçŽ ãé 眮ïŒã - place()
ãã¬ãŒã äžã«åº§æšãçŽæ¥æå®ããŠãèŠçŽ ãé 眮ããã
ãã®ããã«ãGUIãžã®èŠçŽ ã®è¡šç€ºæ¹æ³ã«ãè€æ°ã®æ¹æ³ãçšæãããŠããŸãã
ãŸãããããŸã§ã®è§£èª¬ã§ã¯ã©ãã«ãé
眮ããã®ã¿ã®ã³ãŒãã玹ä»ããŸããããTkinterã§ã¯ãã®ä»ã«ããã§ãã¯ããã¯ã¹ãããã¹ããã©ãŒã ããã¿ã³ãã¹ããŒã¿ã¹ãšãªã¢ãªã©ãé
眮ããããšãåºæ¥ãŸãã
ããã«ãé
眮ãããã¿ã³ã®ã¯ãªãã¯ã€ãã³ããæ€åºããŠããã®éã«èªåã§äœæãã颿°ãå®è¡ããããšãã§ããŸãã
GUIäžã«ãã¿ã³ãé
眮ããŠé¢æ°ãå®è¡ããã³ãŒãã¯æ¬¡ã®éãã§ãã
# 颿°ãçŽã¥ãããã¿ã³ãé
眮
#--------------------------
import tkinter
root = tkinter.Tk()
root.title('demo_Tkinter')
root.geometry("400x400")
# ã³ã³ãœãŒã«ã«"Button is clicked."ãåºåãã颿°
def clicked():
print("Button is clicked.")
# ãã¿ã³ã®äœæïŒtext=ãã¿ã³ã«è¡šç€ºãããããã¹ã, command=æŒäžæã«åŒã³åºã颿°ïŒ
button = tkinter.Button(root, text="ãã¿ã³", command=clicked)
# ãã¿ã³ã®è¡šç€º
button.grid()
root.mainloop()

äžèšã³ãŒãäžã® tkinter.Button()ã¡ãœããã§ããã¿ã³ã®äœæãšé¢æ°ã®çŽã¥ããè¡ã£ãŠããŸãã
tkinter.Button()ã¡ãœããã®ããŒã¯ãŒãåŒæ°textã«ã¯ãã¿ã³ã«è¡šç€ºããæèšãæå®ã§ããããŒã¯ãŒãåŒæ°commandã«ã¯ãã¿ã³æŒäžæã«åŒã³åºããã颿°åãæå®ã§ããŸãã
äžèšã³ãŒãäžã§ããŒã¯ãŒãåŒæ°commandã«æå®ãã颿°ãclicked()ãã¯ãã³ã³ãœãŒã«ã«"Button is clicked."ãåºåãã颿°ãšããŠå®çŸ©ãããŠããŸãã
ã§ãã®ã§è¡šç€ºãããGUIäžã®ãã¿ã³ãæŒäžãããšããã®æç¹ã§clicked() ãå®è¡ãããã³ã³ãœãŒã«ã« "Button is clicked." ãåºåãããŸãã

æåŸã«ããããåãããŠç°¡åãªTODOã¢ããªãäœæããŠã¿ãŸãã
# TODOã¢ããª
#--------------------------
import tkinter as tk
# Todoã¢ããªã®ã¯ã©ã¹
class TodoApp(tk.Tk):
def __init__(self):
super().__init__()
self.title("Todo App")
self.geometry("400x400")
# ã©ãã«ãšãšã³ããªãŒãé
眮ãããã¬ãŒã
input_frame = tk.Frame(self)
input_frame.pack(pady=10)
tk.Label(input_frame, text="Task:").grid(row=0, column=0)
self.task_entry = tk.Entry(input_frame, width=30)
self.task_entry.grid(row=0, column=1)
# 远å ãã¿ã³ãé
眮ãããã¬ãŒã
btn_frame = tk.Frame(self)
btn_frame.pack(pady=10)
tk.Button(btn_frame, text="Add Task", command=self.add_task).pack(side="left")
tk.Button(btn_frame, text="Delete Task", command=self.delete_task).pack(side="left")
# ã¿ã¹ã¯ã®äžèЧã衚瀺ãããªã¹ãããã¯ã¹
self.task_list = tk.Listbox(self, selectmode="multiple", bd=10)
self.task_list.pack(fill="both", expand=True)
# ã¿ã¹ã¯ã®äžèЧ
self.tasks = []
# ã¿ã¹ã¯ã®è¿œå
def add_task(self):
task = self.task_entry.get()
if task:
self.tasks.append(task)
self.task_list.insert("end", task)
self.task_entry.delete(0, "end")
# ã¿ã¹ã¯ã®åé€
def delete_task(self):
selected_indices = self.task_list.curselection()
for index in selected_indices[::-1]:
self.task_list.delete(index)
self.tasks.pop(index)
# Todoã¢ããªãèµ·åãã
if __name__ == "__main__":
app = TodoApp()
app.mainloop()

ãã®ããã«PythonæšæºGUIã©ã€ãã©ãªTkinterã䜿ãããšã§ãGUIã¢ããªãäœæå¯èœã§ãã
ããã§ç޹ä»ããã®ã¯ã·ã³ãã«ãªã©ãã«ããã¿ã³ã®é
眮ã®ã¿ã§ããããTkinterã«ã¯ãŸã ãŸã ä»ã«ãããããã®æ©èœãçšæãããŠããŸãã
èå³ã®ããæ¹ã¯ãã²èª¿ã¹ãŠã¿ãŠãã ããã
ãŸãšã
ä»åã¯ãPythonã§GUIã¢ããªã±ãŒã·ã§ã³ãäœãæã®ããããã®ã©ã€ãã©ãªã®ç޹ä»ãšããã®ãã¡ã®ã²ãšã€ã§ããTkinterã䜿çšããGUIã¢ããªã®ã³ãŒãã«ã€ããŠã®è§£èª¬ãè¡ããŸããã
GUIã¢ããªãå¶äœã§ãããšãPythonã§å¶äœããããŒã«çãããã°ã©ãã³ã°èšèªã«ã€ããŠè©³ãããªãæ¹ãªã©ã«ç°¡åã«å
±æã§ããããã«ãªããŸãã
ãã²ç©æ¥µçã«æŽ»çšããŠãè²ã
ãªããŒã«çãGUIã¢ããªãšããŠå®è£
ã§ããããã«ãªããŸãããã
##ãã®èšäºã®ããŒã¯ãŒãã«é¢ããå匷äŒã»ã€ãã³ããæ¢ã
TECH PLAYã§ã¯ãITãšã³ãžãã¢åãã®å匷äŒã»ã€ãã³ãæ å ±ãæäŸããŠããŸãã
èå³ã®ããæ¹ã¯ãã²ãåå ãã ããã













