
ãã€ããŒã PySimpleGUIã玹ä»
# Pythonã«ãããä»ã®GUIã«ã€ããŠ
以äžã¯ãããŸã§å人çãªå°è±¡
tkinter
ã»æšæºã ãããã䜿ãã&å ¥éèšäºãæ¬ãå€ã
ã»ããã¥ã¡ã³ããé(event_generateãšãã¯å šç¶æžããŠãªã)
ã»äœã蟌ãããšãããšå ã®Tcl/Tkãç¥ãå¿ èŠæã
ã»ã³ãŒãéãå€ã
ã»é 眮ã倧å€
PySimpleGUI
ã»pip3 install pysimplegui ã§äœ¿ãã
ã»[ããã¥ã¡ã³ã]ãæ¬åœã«ãã£ããããŠãã(cookbookãªãããŒãžãã)
ã»ã³ãŒãéãå°ãªã(ççž®åããã)
ã»é çœ®ãæ¥œ(ãªã¹ããšããŠèšè¿°ã§ãã)
以äžãèŠãã°ç°¡åãªãã®ã¯ãµã¯ããšäœãããã«èª¬æããšããã©ããå ¬åŒãµã€ãã®ã¬ã·ãããã°ã©ã ãçšããªããã
# ãŠã£ã³ããŠã®å®è£ æ¹æ³ã¯2ã€
## ã¯ã³ã·ã§ãããŠã£ã³ããŠ
ã¯ã³ã·ã§ãããŠã£ã³ã㊠ã¯ãããã¢ããã®ãããªãã®ã
1åOKãã¿ã³ãæŒããšãã®ãŠã£ã³ããŠã¯éãããæ¬¡ã®å·¥çšã§ã¯æ°ãããŠã£ã³ããŠãåºãŠããã
以äžã¯å ¬åŒãµã€ãã®cookbookã«ããããã°ã©ã
import PySimpleGUI as sg
layout = [
[sg.Text("My one-shot window.")],
[sg.InputText(key="-IN-")],
[sg.Submit(), sg.Cancel()],
]
window = sg.Window("Window Title", layout)
event, values = window.read()
window.close()
text_input = values["-IN-"]
sg.popup("You entered", text_input)hogehogeãšå
¥åããŠSubmitãã¿ã³ãæŒããšã
æåã®ãŠã£ã³ããŠãæ¶ããŠæ°ãããŠã£ã³ããŠ(ãããã¢ãããŠã£ã³ããŠ)ãåºãŠããã
ããã°ã©ã ãèŠãŠã¿ãããŠã£ãžã§ãã㯠"layout" ã®ããã«ãªã¹ãã§äžŠã¹ãããšãã§ãããWindowã¯ã©ã¹ã®read()ã®1ã€ç®ã®è¿ãå€ãã©ããªã€ãã³ããèµ·ãã£ãããè¿ãã
2ã€ç®ã®è¿ãå€ã¯èŸæžã§ãå
¥åç³»ã®å€ã¯ããã«å
¥ããsg.InputText(key="-IN-") ã®ããã«ããŠããŒãæå®ãèŸæžãªã®ã§ãå
¥åããå€ãåºããšã㯠values["-IN-"]ã
ãã¡ãããããŒãæå®ããªããŠãèªåã§0ããçªå·ãä»äžããããçªå·ã®å Žåã¯ãvalues[0]ã®ããã«æå®ã§ããã
ãŸããButtonã¯Buttonã«è¡šç€ºãããæååãTextã¯Textã«è¡šç€ºãããæååãããŒã«ãªãã
ãããã¢ãããŠã£ã³ããŠã®è©³ãã説æã«ã€ããŠã¯ãã)ãButtonã¯ããã
## æç¶çãŠã£ã³ããŠ
æç¶çãŠã£ã³ã㊠ã¯ããœãããŠã§ã¢ãšãã®ããã«ã1ã€ã®ãŠã£ã³ããŠã®äžã§ç»é¢ãé·ç§»ããŠãããã®ããã¶ããã£ã¡ãäž»æµã
以äžã¯å ¬åŒãµã€ãã®cookbookã«ããããã°ã©ã
import PySimpleGUI as sg
sg.theme("BluePurple")
layout = [
[sg.Text("Your typed chars appear here:"), sg.Text(size=(15, 1), key="-OUTPUT-")],
[sg.Input(key="-IN-")],
[sg.Button("Show"), sg.Button("Exit")],
]
window = sg.Window("Pattern 2B", layout)
while True: # Event Loop
event, values = window.read()
print(event, values)
if event in (None, "Exit"):
break
if event == "Show":
# "-OUTPUT-" èŠçŽ ã "-IN-" èŠçŽ ã®å€ã«æŽæ°
window["-OUTPUT-"].update(values["-IN-"])
window.close()æåã®ãŠã£ã³ããŠã§hogeãšå
¥åããŠShowãã¿ã³ãæŒããšã
åããŠã£ã³ããŠã®ãŸãŸç»é¢ãæŽæ°ãããã1è¡ç®ã« hoge ãšè¡šç€ºãããŠããããšããããã
ããã°ã©ã ãèŠãŠã¿ããä»åºŠã¯äžåºŠã€ãã³ããçºçããŠããwhileã«ãŒãã«ãã£ãŠç¹°ãè¿ãããŠãããç»é¢ã®æŽæ°ã¯updateã¡ãœããã«ãã£ãŠè¡ãããã
ã³ãŒããçãããããã«ãButtonãBãTextãT ãTxtãšæžãããšãã§ããã
# ããŒãã®å€æŽ
sg.theme() ã§ããŒãã倿Žã§ãããããŒãã®äžèЧã¯
import PySimpleGUI as sg
sg.preview_all_look_and_feel_themes()ãŸãã¯
import PySimpleGUI as sg
"""
PySimpleGUIã®ããŒããPySimpleGUIã䜿ã£ãŠç¢ºèªããããšãã§ããŸãã
ããããã®ããŒãåãã¯ãªãã¯ãããšãéžæããããŒãã䜿çšãããŠã£ã³ããŠãåºãŸãã
"""
sg.theme('Dark Brown')
layout = [[sg.Text('Look and Feel Browser')],
[sg.Text('Click a look and feel color to see demo window')],
[sg.Listbox(values=sg.theme_list(),
size=(20, 12), key='-LIST-', enable_events=True)],
[sg.Button('Exit')]]
window = sg.Window('Look and Feel Browser', layout)
while True: # Event Loop
event, values = window.read()
if event in (None, 'Exit'):
break
sg.theme(values['-LIST-'][0])
sg.popup_get_text('This is {}'.format(values['-LIST-'][0]))
window.close()ã§èŠãããšãã§ãã(詳ããã¯å
¬åŒãµã€ãã®ããããžããããããžã)ãåŸè
ã®ã»ãããªã¹ã¹ã¡ã以äžã®ç»åã®ããã«ããªã¹ãããéžæã§ããã
ããŒãã¯èªäœãä¿®æ£ãå¯èœãã¿ã€ãã«ããŒãæ¶ãããããããã§ããã
# ã³ãã³ãã©ã€ã³ã®åŒæ°ã§åäœãå€ããã¬ã·ã
ã³ãã³ãã©ã€ã³ã§å®è¡ããéã«ãåŒæ°ã«ãã¡ã€ã«åãå ¥ããšããããã®ãšãã«ãåŒæ°ãããã°ããããã¡ã€ã«åãšãããªããã°GUIã§ãã¡ã€ã«ãã©ãŠã¶ãŒãéããŠãã¡ã€ã«åãåŒã£åŒµã£ãŠãããããããªã¬ã·ãããã£ãã
import PySimpleGUI as sg
import sys
if len(sys.argv) == 1:
event, values = sg.Window('My Script',
[[sg.Text('Document to open')],
[sg.InputText(), sg.FileBrowse()],
[sg.Open(), sg.Cancel()]]).read(close=True)
fname = values[0]
else:
fname = sys.argv[1]
if not fname:
sg.popup("Cancel", "No filename supplied")
raise SystemExit("Cancelling: no filename supplied")
else:
sg.popup('The filename you chose was', fname)ããã¯ãããã®ãŸãŸèªåã®ããã°ã©ã ã«è¿œå ã§ãããã
FileBrowse ã¯äžã®ç»åã§ã¯"Browse"ãšãªã£ãŠããŠããããæŒããšãã¡ã€ã«éžæãã€ã¢ãã°ãã§ãŠãããããã§ãã¡ã€ã«ãéžæãããšã
åã«é 眮ãããŠãã Input ã«ããã¹ããæ¿å ¥ãããŠããã
ãã®ããã°ã©ã ã§ã¯ãInputText ãš FileBrowse ã«ã€ããŠã¯ãç¹ã«å€ã®ããåããæå®ããããã§ã¯ãªããããã¯ãFileBrowse ã®ãããªãã¿ã³ã«ã¯ã"ã¿ãŒã²ãã"(Button Elementã®Button targets åç §)ãããããã
ã¿ãŒã²ããã¯ããã©ã«ãã§ãäžã€å·Šã®Text ã InputText èŠçŽ ãæãã
ã€ãŸããInputText ãš FileBrowse ãé£å士ã§é 眮ããã ãã§ãFileBrowse ã§ååŸãããã¡ã€ã«åãèªåã§InputTextã«æ¿å ¥ãããã
ãã¡ãã以äžã®ããã«ãInputText ã«ããŒãFileBrowseã«ãã®ããŒãã¿ãŒã²ãããšããŠæå®ããã°ãå€ã®ããåããå¯èœã
layout = [[sg.T('Source Folder')],
[sg.In(key='input')],
[sg.FolderBrowse(target='input'), sg.OK()]]# ã³ãŒã«ããã¯ã®å®è£
å ¬åŒãµã€ããã以äžã®ããã«ã³ãŒã«ããã¯ãå®è£ ããããšãã§ããã
import PySimpleGUI as sg
sg.theme("Light Blue 3")
# ãã®ãã¶ã€ã³ãã¿ãŒã³ã¯ããã¿ã³ã®ã³ãŒã«ããã¯ã®ã·ãã¥ã¬ãŒã
# ãã®å®è£
ã¯ãåçŽãªèŸæžã䜿ã£ãŠã€ãã³ããšé¢æ°ãæ ŒçŽãã
# ã³ãŒã«ããã¯é¢æ°
def button1():
print("Button 1 callback")
def button2():
print("Button 2 callback")
# 颿°ãåŒã³åºããã¿ã³ã®å¯Ÿå¿ãèšããèŸæž
dispatch_dictionary = {"1": button1, "2": button2}
# GUIã®ãã¶ã€ã³ãã¬ã€ã¢ãŠã
layout = [
[sg.Text("Please click a button", auto_size_text=True)],
[sg.Button("1"), sg.Button("2"), sg.Button("3"), sg.Quit()],
]
# ãŠãŒã¶ãŒã«ãŠã£ã³ããŠã衚瀺
window = sg.Window("Button callback example", layout)
# Event loop. ãã¿ã³ãèªãã§ã³ãŒã«ããã¯ãã
while True:
# ãŠã£ã³ããŠãèªã¿åã
event, value = window.read()
if event in ("Quit", None):
break
# çºçããã€ãã³ãã颿°ãæžããèŸæžã«ããã調ã¹ã
if event in dispatch_dictionary:
func_to_call = dispatch_dictionary[event]
func_to_call()
else:
print("Event {} not in dispatch dictionary".format(event))
window.close()
# All done!
sg.popup_ok("Done")ãŸããButton ãäœæãããšãã®åå(=Buttonã®ããŒ)ãšé¢æ°åã察å¿ãããèŸæž(ããã§ã¯dispatch_dictionary)ãçšæãããwhileã®äžã§çºçããã€ãã³ããèŸæžã«æããã調ã¹ãŠãååšããã°åŒã¶ã
# ããã°ã¬ã¹ã¡ãŒã¿ãŒ
1è¡ã§ããã°ã¬ã¹ã¡ãŒã¿ãŒãæžãã!
å ¬åŒãµã€ãæ°ããä»ã®Pythonããã±ãŒãžã¯è€æ°è¡ã§æžããã°ãªããªãããšãã«ãŒãã®å€ã§ãæžãå¿ èŠããã ãšã®ããšãéåžžã«çŽæçã ãªãã詳ããæ å ±ã¯ããã
import PySimpleGUI as sg
sg.theme('Dark Blue 8')
for i in range(1000): # this is your "work loop" that you want to monitor
sg.OneLineProgressMeter('One Line Meter Example', i + 1, 1000, 'key')# ããã°ã¬ã¹ããŒ
ããã°ã¬ã¹ããŒããããŸãã以äžã¯å ¬åŒãµã€ãã®ã«ã¹ã¿ãã€ãºã«ã€ããŠã®ããã°ã©ã ã
import PySimpleGUI as sg
layout = [
[sg.Text("A custom progress meter")],
[sg.ProgressBar(1000, orientation="h", size=(20, 20), key="progbar")],
[sg.Cancel()],
]
window = sg.Window("Custom Progress Meter", layout)
for i in range(1000):
event, values = window.read(timeout=0)
if event == "Cancel" or event is None:
break
window["progbar"].update_bar(i + 1)
window.close()# ã¬ã€ã¢ãŠãã®èšè¿°ã®æ³šæç¹
PySimpleGUIã§ã¯ã¬ã€ã¢ãŠãããªã¹ãã§æžãããããããblackãªã©ã®ãã©ãŒããããããããšããã£ãããããã«æžãããªã¹ãæ§é ãããã£ãŠèŠã«ãããªã£ãŠããŸãã
ãããªãšãã¯ã
# fmt:off
layout = [[hogehoge]]
# fmt:onã®ãããªéšåçã«ãã©ãŒãããããªãã«ããã³ã¡ã³ãã¢ãŠããçšãããšè¯ã(äŸã¯blackã§ã®ãªã³ãªã)ã
# ãã®ä»
å ¬åŒã®ããã¥ã¡ã³ãããã¢ããã°ã©ã çã¯ä»¥äžã
http://PySimpleGUI.org
http://calls.PySimpleGUI.org
http://Cookbook.PySimpleGUI.org
http://Demos.PySimpleGUI.org
http://Trinket.PySimpleGUI.org
http://YouTube.PySimpleGUI.org
http://PySimpleGUI.com
PySimpleGUIã®ä»ã®èšäºã¯ä»¥äžã









