{"id":111,"date":"2020-11-03T09:31:09","date_gmt":"2020-11-03T09:31:09","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/?post_type=chapter&#038;p=111"},"modified":"2021-05-06T17:49:10","modified_gmt":"2021-05-06T17:49:10","slug":"pysimplegui-graafikaakna-vidinad","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/pysimplegui-graafikaakna-vidinad\/","title":{"raw":"PySimpleGUI graafikaakna vidinad","rendered":"PySimpleGUI graafikaakna vidinad"},"content":{"raw":"Hetkel oleme vaadanud ainult <em><strong>Submit<\/strong> <\/em>ja <em><strong>Cancel<\/strong> <\/em>nuppe ning <em><strong>Input<\/strong> <\/em>tekstisisestusv\u00e4lja, aga tegelikult on SimpleGUI-s rohkelt p\u00f5nevaid komponente ehk vidinaid (ingl <em>widgets<\/em>). Samuti uurime, kuidas avada graafikaaknast faile ning sisestada sinna pilte.\r\n\r\n&nbsp;\r\n\r\nHakkame samm-sammult uurima, kuidas lisada graafikaaknasse selliseid elemente nagu j\u00e4rgneval joonisel:\r\n\r\n<img class=\"alignnone wp-image-762\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/3_erinevad-vidinad.png\" alt=\"\" width=\"526\" height=\"650\" \/>\r\n<h2>Raadionupp<\/h2>\r\nRaadionupp on mitmikvalikuv\u00f5imalus, kus m\u00e4rkida saab vaid \u00fche valikutest. <em>Default=true<\/em> m\u00e4\u00e4rab \u00e4ra, milline valik on vaikimisi aktiivne.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Radio('Valik 1', \"RADIO1\"),  sg.Radio('Valik 2', \"RADIO1\", default=True)<\/pre>\r\nV\u00e4ljund:\r\n\r\n<img class=\"alignnone wp-image-421\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/raadionupp.png\" alt=\"\" width=\"172\" height=\"34\" \/>\r\n<h2>M\u00e4rkeruut<\/h2>\r\nM\u00e4rkeruut on mitmikvaliku v\u00f5imalus, kus kasutaja saab linnukese panna mitmesse ruutu.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Checkbox('Valikvastus 1'),  sg.Checkbox('Valikvastus 2')<\/pre>\r\nV\u00e4ljund:\r\n\r\n<img class=\"alignnone wp-image-420\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/markeruut-300x36.png\" alt=\"\" width=\"267\" height=\"32\" \/>\r\n<h2>Suurem tekstisisestusv\u00e4li<\/h2>\r\nSuurem tekstisisestusv\u00e4li annab v\u00f5imaluse sisestada pikemat teksti. <em>Default_text<\/em> on kiri, mida n\u00e4idatakse v\u00e4ljal vaikimisi. Selleks on hetkel luuletus, kus peab kasutama ka reavahetusi. Uuri, kuidas see on tehtud! Kui kasutaja tahab ise midagi v\u00e4ljale kirjutada, peab ta esmalt vaiketeksti \u00e4ra kustutama.\r\n\r\nM\u00e4\u00e4rata saab ka v\u00e4lja suuruse ning joonduse <em>(justification). H<\/em>etkel on see v\u00e4li joondatud vasakule.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Multiline(default_text='Toas on kena j\u00f5ulupuu, \\ntaevas t\u00e4ies s\u00e4ras kuu. \\nTaevas s\u00e4ravad ka t\u00e4hed, \\nkingitusi veel mul v\u00e4he.', size=(35, 4), justification='left')<\/pre>\r\nV\u00e4ljund:\r\n\r\n<img class=\"alignnone size-medium wp-image-423\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/suurem-tekstivali-300x77.png\" alt=\"\" width=\"300\" height=\"77\" \/>\r\n<h2>Rippmen\u00fc\u00fc<\/h2>\r\nRippmen\u00fc\u00fc annab kasutajale v\u00f5imaluse noolele kl\u00f5psates valida \u00fche elemendi valikust.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.InputCombo(('Valik 1', 'Valik 2', 'Valik 3'), size=(10, 1))<\/pre>\r\nV\u00e4ljund:\r\n\r\n<img class=\"alignnone size-full wp-image-422\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/rippmenuu.png\" alt=\"\" width=\"133\" height=\"43\" \/>\r\n<h2>Valikute kast<\/h2>\r\nValikute kast kuvab kasti, kus saab valikuid kerida \u00fcles-alla, et \u00f5ige valik \u00fcles leida ja sellel klikkida.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Listbox(values=('Valik 1', 'Valik 2', 'Valik 3', 'Valik 4', 'Valik 5', 'Valik 6', 'Valik 7'), size=(20, 5))<\/pre>\r\nV\u00e4ljund:\r\n\r\n<img class=\"alignnone wp-image-424\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/valikute-kast.png\" alt=\"\" width=\"248\" height=\"122\" \/>\r\n<h2>Liugur<\/h2>\r\nLiugurit saab kasutada n\u00e4iteks siis, kui on vaja valida arv vahemikus 1-10. Liuguri suund saab olla kas horisontaalne <em>(orientation=\u2019h\u2019<\/em>) v\u00f5i vertikaalne (<em>orientation=\u2019v\u2019<\/em>). Samuti saab m\u00e4\u00e4rata vaikev\u00e4\u00e4rtuse.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Slider(range=(1, 10), orientation='h', size=(20, 20), default_value=5)<\/pre>\r\nV\u00e4ljund:\r\n\r\n<img class=\"alignnone wp-image-419\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/liugur.png\" alt=\"\" width=\"247\" height=\"45\" \/>\r\n<h2>Elementide paigutamine raami<\/h2>\r\nKui tahta n\u00e4iteks m\u00f5ned vidinad paigutada graafikaaknas eraldi raami sisse, saame kasutada <em><strong>sg.Frame<\/strong><\/em> ja <em><strong>sg.Column<\/strong><\/em>. N\u00e4ide:\r\n\r\n<img class=\"alignnone wp-image-418\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/frame-ja-column-300x42.png\" alt=\"\" width=\"314\" height=\"44\" \/>\r\nSeda saame teha nii, kui enne paigutuse muutuja defineerimist loome veel kaks muutujat, kuhu paigutame n\u00e4iteks kahte sorti mitmikvalikuv\u00f5imaluse nuppe, millega juba tutvunud oleme:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">veerud = [[sg.Checkbox('Valikvastus 1'),  sg.Checkbox('Valikvastus 2')]]\r\nveerud2 = [[sg.Radio('Valik 1', \"RADIO1\"),  sg.Radio('Valik 2', \"RADIO1\", default=True)]]<\/pre>\r\nN\u00fc\u00fcd, et kuvada neid suures paigutuse aknas raamides, peaksime muutujasse paigutus lisama alamj\u00e4rjendi:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">[sg.Frame('Vali mitu: ', [[sg.Column(veerud)]]), sg.Frame('Vali \u00fcks: ', [[sg.Column(veerud2)]])]<\/pre>\r\n<em><strong>sg.Frame<\/strong><\/em> tekitab raami, kus saame m\u00e4\u00e4rata raami pealkirja (\u2018Vali mitu: \u2019 ja \u2018Vali \u00fcks: \u2018) ning sisu, milleks kasutame <em><strong>sg.Column<\/strong><\/em> - see paigutab muutujates <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">veerud<\/code> ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">veerud2<\/code> olevad elemendid raami veergude kaupa.\r\n\r\nProovi, kuidas elemendid paigutatakse, kui n\u00e4iteks muutujas <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">veerud2<\/code> on kahe raadionupu asemel neid neli t\u00fckki.\r\n<h2>N\u00e4ide - erinevad vidinad<\/h2>\r\nSiin on n\u00e4ide programmist, kus graafikaaknasse on kuvatud k\u00f5ik tutvustatud vidinad:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\n\r\n#theme asemel kasutame:\r\nsg.ChangeLookAndFeel('TanBlue')\r\n#et n\u00e4ha k\u00f5iki teemade variante, v\u00f5id need ekraanile kuvada:\r\n#print(sg.ListOfLookAndFeelValues())\r\n\r\nveerud = [[sg.Checkbox('Valikvastus 1'),  sg.Checkbox('Valikvastus 2')]]\r\nveerud2 = [[sg.Radio('Valik 1', \"RADIO1\"),  sg.Radio('Valik 2', \"RADIO1\", default=True)]]\r\n\r\npaigutus = [\r\n    [sg.Text('N\u00e4ited erinevatest nuppudest ja v\u00e4ljadest!', size=(35, 1), justification='left', font=(\"Helvetica\", 15))],\r\n    \r\n    [sg.Text('K\u00f5ige tavalisem tekstiv\u00e4li: ')],\r\n    [sg.InputText()],\r\n    \r\n    [sg.Frame('Vali mitu: ', [[sg.Column(veerud)]]), sg.Frame('Vali \u00fcks: ', [[sg.Column(veerud2)]])],\r\n    \r\n    [sg.Text('Suurem tekstiv\u00e4li: ')],\r\n    [sg.Multiline(default_text='Toas on kena j\u00f5ulupuu, \\ntaevas t\u00e4ies s\u00e4ras kuu. \\nTaevas s\u00e4ravad ka t\u00e4hed, \\nkingitusi veel mul v\u00e4he.', size=(35, 4))],\r\n    \r\n    #Eraldamiseks saame luua joone\r\n    [sg.Text('_' * 80)],\r\n    \r\n    [sg.Text('Rippmen\u00fc\u00fc: ', size=(11,1))],    \r\n    [sg.InputCombo(('Valik 1', 'Valik 2', 'Valik 3'), size=(10, 1))],\r\n    \r\n    [sg.Text('Valikute kast: ')],\r\n    [sg.Listbox(values=('Valik 1', 'Valik 2', 'Valik 3', 'Valik 4', 'Valik 5', 'Valik 6', 'Valik 7'), size=(20, 5))],\r\n    \r\n    [sg.Text('Liugur: ', size=(20,1))],\r\n    [sg.Slider(range=(1, 10), orientation='h', size=(20, 20), default_value=5)],\r\n        \r\n    #lisame ka juba tuttavad nupud\r\n    [sg.Submit('Saada!'), sg.Cancel('Sulge')]]\r\n\r\naken = sg.Window('Palju erinevaid vidinaid!', paigutus, size=(600,700), default_element_size=(40, 1), grab_anywhere=False)\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()    \r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge':\r\n        break\r\n    if syndmus == 'Saada!':\r\n        aken.close()\r\n        sg.Popup('Kuvame siin Sinu sisestatud vastused: ',\r\n                 #Vastused kuvatakse s\u00f5nastikuna looksulgude vahel\r\n                 'Vajutatud nupp: \"{}\"'.format(syndmus),\r\n                 'Vastused: ', v22rtused)\r\n\r\naken.close()<\/pre>\r\n<h2>Faili avamine<\/h2>\r\nTihtipeale on vaja kasutada programmis mingit faili, mis kasutaja arvutis juba olemas on. \u00d5nneks PySimpleGUI v\u00f5imaldab teha seda suhteliselt mugvalt luues n\u00e4iteks nupu, millele vajutades avaneb aken, kus saab sirvida faile.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Input(size=(20,1)), sg.FileBrowse('Sirvi', key='valitud_fail')<\/pre>\r\nFailinime saaks salvestada muutujasse n\u00e4iteks nii:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">fail = v22rtused['valitud_fail']<\/pre>\r\nKui n\u00fc\u00fcd tahaksime failipuust eraldada vaid faili nime (selleks v\u00f5iks olla n\u00e4iteks pilt, mida tahaksime ekraanil kuvada), tuleks esmalt importida moodul, mis sisaldab operatsioonis\u00fcsteemiga seotud funktsioone - <em><strong>import os<\/strong><\/em>. Et faili nime failipuust eraldada, tuleks kasutada <em>split()<\/em>-funktsiooni.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">import os\r\n\r\npuu, failinimi = os.path.split(fail)<\/pre>\r\n<h2>Piltide sisestamine<\/h2>\r\nKui meil on failinimi teada, saab graafikaaknasse kuvada selle pildi (see meetod toimib vaid .png formaadis piltidega! Uuri 5. peat\u00fckist, kuidas saaks kasutada ka n\u00e4iteks .jpg pilte).\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Image(failinimi)<\/pre>\r\n&nbsp;\r\n\r\nSeega selles peat\u00fckis \u00f5ppisid kasutama erinevaid elemente, mille abil oma programmi kasutajaliidest veelgi mitmekesisemaks muuta. Samuti tead n\u00fc\u00fcd, kuidas nupule vajutades avada faili v\u00f5i pilti!","rendered":"<p>Hetkel oleme vaadanud ainult <em><strong>Submit<\/strong> <\/em>ja <em><strong>Cancel<\/strong> <\/em>nuppe ning <em><strong>Input<\/strong> <\/em>tekstisisestusv\u00e4lja, aga tegelikult on SimpleGUI-s rohkelt p\u00f5nevaid komponente ehk vidinaid (ingl <em>widgets<\/em>). Samuti uurime, kuidas avada graafikaaknast faile ning sisestada sinna pilte.<\/p>\n<p>&nbsp;<\/p>\n<p>Hakkame samm-sammult uurima, kuidas lisada graafikaaknasse selliseid elemente nagu j\u00e4rgneval joonisel:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-762\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/3_erinevad-vidinad.png\" alt=\"\" width=\"526\" height=\"650\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/3_erinevad-vidinad.png 598w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/3_erinevad-vidinad-243x300.png 243w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/3_erinevad-vidinad-65x80.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/3_erinevad-vidinad-225x278.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/3_erinevad-vidinad-350x433.png 350w\" sizes=\"auto, (max-width: 526px) 100vw, 526px\" \/><\/p>\n<h2>Raadionupp<\/h2>\n<p>Raadionupp on mitmikvalikuv\u00f5imalus, kus m\u00e4rkida saab vaid \u00fche valikutest. <em>Default=true<\/em> m\u00e4\u00e4rab \u00e4ra, milline valik on vaikimisi aktiivne.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Radio('Valik 1', \"RADIO1\"),  sg.Radio('Valik 2', \"RADIO1\", default=True)<\/pre>\n<p>V\u00e4ljund:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-421\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/raadionupp.png\" alt=\"\" width=\"172\" height=\"34\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/raadionupp.png 197w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/raadionupp-65x13.png 65w\" sizes=\"auto, (max-width: 172px) 100vw, 172px\" \/><\/p>\n<h2>M\u00e4rkeruut<\/h2>\n<p>M\u00e4rkeruut on mitmikvaliku v\u00f5imalus, kus kasutaja saab linnukese panna mitmesse ruutu.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Checkbox('Valikvastus 1'),  sg.Checkbox('Valikvastus 2')<\/pre>\n<p>V\u00e4ljund:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-420\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/markeruut-300x36.png\" alt=\"\" width=\"267\" height=\"32\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/markeruut-300x36.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/markeruut-65x8.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/markeruut-225x27.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/markeruut.png 303w\" sizes=\"auto, (max-width: 267px) 100vw, 267px\" \/><\/p>\n<h2>Suurem tekstisisestusv\u00e4li<\/h2>\n<p>Suurem tekstisisestusv\u00e4li annab v\u00f5imaluse sisestada pikemat teksti. <em>Default_text<\/em> on kiri, mida n\u00e4idatakse v\u00e4ljal vaikimisi. Selleks on hetkel luuletus, kus peab kasutama ka reavahetusi. Uuri, kuidas see on tehtud! Kui kasutaja tahab ise midagi v\u00e4ljale kirjutada, peab ta esmalt vaiketeksti \u00e4ra kustutama.<\/p>\n<p>M\u00e4\u00e4rata saab ka v\u00e4lja suuruse ning joonduse <em>(justification). H<\/em>etkel on see v\u00e4li joondatud vasakule.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Multiline(default_text='Toas on kena j\u00f5ulupuu, \\ntaevas t\u00e4ies s\u00e4ras kuu. \\nTaevas s\u00e4ravad ka t\u00e4hed, \\nkingitusi veel mul v\u00e4he.', size=(35, 4), justification='left')<\/pre>\n<p>V\u00e4ljund:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-423\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/suurem-tekstivali-300x77.png\" alt=\"\" width=\"300\" height=\"77\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/suurem-tekstivali-300x77.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/suurem-tekstivali-65x17.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/suurem-tekstivali-225x58.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/suurem-tekstivali-350x90.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/suurem-tekstivali.png 424w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<h2>Rippmen\u00fc\u00fc<\/h2>\n<p>Rippmen\u00fc\u00fc annab kasutajale v\u00f5imaluse noolele kl\u00f5psates valida \u00fche elemendi valikust.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.InputCombo(('Valik 1', 'Valik 2', 'Valik 3'), size=(10, 1))<\/pre>\n<p>V\u00e4ljund:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-422\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/rippmenuu.png\" alt=\"\" width=\"133\" height=\"43\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/rippmenuu.png 133w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/rippmenuu-65x21.png 65w\" sizes=\"auto, (max-width: 133px) 100vw, 133px\" \/><\/p>\n<h2>Valikute kast<\/h2>\n<p>Valikute kast kuvab kasti, kus saab valikuid kerida \u00fcles-alla, et \u00f5ige valik \u00fcles leida ja sellel klikkida.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Listbox(values=('Valik 1', 'Valik 2', 'Valik 3', 'Valik 4', 'Valik 5', 'Valik 6', 'Valik 7'), size=(20, 5))<\/pre>\n<p>V\u00e4ljund:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-424\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/valikute-kast.png\" alt=\"\" width=\"248\" height=\"122\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/valikute-kast.png 276w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/valikute-kast-65x32.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/valikute-kast-225x111.png 225w\" sizes=\"auto, (max-width: 248px) 100vw, 248px\" \/><\/p>\n<h2>Liugur<\/h2>\n<p>Liugurit saab kasutada n\u00e4iteks siis, kui on vaja valida arv vahemikus 1-10. Liuguri suund saab olla kas horisontaalne <em>(orientation=\u2019h\u2019<\/em>) v\u00f5i vertikaalne (<em>orientation=\u2019v\u2019<\/em>). Samuti saab m\u00e4\u00e4rata vaikev\u00e4\u00e4rtuse.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Slider(range=(1, 10), orientation='h', size=(20, 20), default_value=5)<\/pre>\n<p>V\u00e4ljund:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-419\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/liugur.png\" alt=\"\" width=\"247\" height=\"45\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/liugur.png 269w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/liugur-65x12.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/liugur-225x41.png 225w\" sizes=\"auto, (max-width: 247px) 100vw, 247px\" \/><\/p>\n<h2>Elementide paigutamine raami<\/h2>\n<p>Kui tahta n\u00e4iteks m\u00f5ned vidinad paigutada graafikaaknas eraldi raami sisse, saame kasutada <em><strong>sg.Frame<\/strong><\/em> ja <em><strong>sg.Column<\/strong><\/em>. N\u00e4ide:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-418\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/frame-ja-column-300x42.png\" alt=\"\" width=\"314\" height=\"44\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/frame-ja-column-300x42.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/frame-ja-column-65x9.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/frame-ja-column-225x31.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/frame-ja-column-350x49.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/frame-ja-column.png 544w\" sizes=\"auto, (max-width: 314px) 100vw, 314px\" \/><br \/>\nSeda saame teha nii, kui enne paigutuse muutuja defineerimist loome veel kaks muutujat, kuhu paigutame n\u00e4iteks kahte sorti mitmikvalikuv\u00f5imaluse nuppe, millega juba tutvunud oleme:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">veerud = [[sg.Checkbox('Valikvastus 1'),  sg.Checkbox('Valikvastus 2')]]\r\nveerud2 = [[sg.Radio('Valik 1', \"RADIO1\"),  sg.Radio('Valik 2', \"RADIO1\", default=True)]]<\/pre>\n<p>N\u00fc\u00fcd, et kuvada neid suures paigutuse aknas raamides, peaksime muutujasse paigutus lisama alamj\u00e4rjendi:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">[sg.Frame('Vali mitu: ', [[sg.Column(veerud)]]), sg.Frame('Vali \u00fcks: ', [[sg.Column(veerud2)]])]<\/pre>\n<p><em><strong>sg.Frame<\/strong><\/em> tekitab raami, kus saame m\u00e4\u00e4rata raami pealkirja (\u2018Vali mitu: \u2019 ja \u2018Vali \u00fcks: \u2018) ning sisu, milleks kasutame <em><strong>sg.Column<\/strong><\/em> &#8211; see paigutab muutujates <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">veerud<\/code> ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">veerud2<\/code> olevad elemendid raami veergude kaupa.<\/p>\n<p>Proovi, kuidas elemendid paigutatakse, kui n\u00e4iteks muutujas <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">veerud2<\/code> on kahe raadionupu asemel neid neli t\u00fckki.<\/p>\n<h2>N\u00e4ide &#8211; erinevad vidinad<\/h2>\n<p>Siin on n\u00e4ide programmist, kus graafikaaknasse on kuvatud k\u00f5ik tutvustatud vidinad:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\n\r\n#theme asemel kasutame:\r\nsg.ChangeLookAndFeel('TanBlue')\r\n#et n\u00e4ha k\u00f5iki teemade variante, v\u00f5id need ekraanile kuvada:\r\n#print(sg.ListOfLookAndFeelValues())\r\n\r\nveerud = [[sg.Checkbox('Valikvastus 1'),  sg.Checkbox('Valikvastus 2')]]\r\nveerud2 = [[sg.Radio('Valik 1', \"RADIO1\"),  sg.Radio('Valik 2', \"RADIO1\", default=True)]]\r\n\r\npaigutus = [\r\n    [sg.Text('N\u00e4ited erinevatest nuppudest ja v\u00e4ljadest!', size=(35, 1), justification='left', font=(\"Helvetica\", 15))],\r\n    \r\n    [sg.Text('K\u00f5ige tavalisem tekstiv\u00e4li: ')],\r\n    [sg.InputText()],\r\n    \r\n    [sg.Frame('Vali mitu: ', [[sg.Column(veerud)]]), sg.Frame('Vali \u00fcks: ', [[sg.Column(veerud2)]])],\r\n    \r\n    [sg.Text('Suurem tekstiv\u00e4li: ')],\r\n    [sg.Multiline(default_text='Toas on kena j\u00f5ulupuu, \\ntaevas t\u00e4ies s\u00e4ras kuu. \\nTaevas s\u00e4ravad ka t\u00e4hed, \\nkingitusi veel mul v\u00e4he.', size=(35, 4))],\r\n    \r\n    #Eraldamiseks saame luua joone\r\n    [sg.Text('_' * 80)],\r\n    \r\n    [sg.Text('Rippmen\u00fc\u00fc: ', size=(11,1))],    \r\n    [sg.InputCombo(('Valik 1', 'Valik 2', 'Valik 3'), size=(10, 1))],\r\n    \r\n    [sg.Text('Valikute kast: ')],\r\n    [sg.Listbox(values=('Valik 1', 'Valik 2', 'Valik 3', 'Valik 4', 'Valik 5', 'Valik 6', 'Valik 7'), size=(20, 5))],\r\n    \r\n    [sg.Text('Liugur: ', size=(20,1))],\r\n    [sg.Slider(range=(1, 10), orientation='h', size=(20, 20), default_value=5)],\r\n        \r\n    #lisame ka juba tuttavad nupud\r\n    [sg.Submit('Saada!'), sg.Cancel('Sulge')]]\r\n\r\naken = sg.Window('Palju erinevaid vidinaid!', paigutus, size=(600,700), default_element_size=(40, 1), grab_anywhere=False)\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()    \r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge':\r\n        break\r\n    if syndmus == 'Saada!':\r\n        aken.close()\r\n        sg.Popup('Kuvame siin Sinu sisestatud vastused: ',\r\n                 #Vastused kuvatakse s\u00f5nastikuna looksulgude vahel\r\n                 'Vajutatud nupp: \"{}\"'.format(syndmus),\r\n                 'Vastused: ', v22rtused)\r\n\r\naken.close()<\/pre>\n<h2>Faili avamine<\/h2>\n<p>Tihtipeale on vaja kasutada programmis mingit faili, mis kasutaja arvutis juba olemas on. \u00d5nneks PySimpleGUI v\u00f5imaldab teha seda suhteliselt mugvalt luues n\u00e4iteks nupu, millele vajutades avaneb aken, kus saab sirvida faile.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Input(size=(20,1)), sg.FileBrowse('Sirvi', key='valitud_fail')<\/pre>\n<p>Failinime saaks salvestada muutujasse n\u00e4iteks nii:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">fail = v22rtused['valitud_fail']<\/pre>\n<p>Kui n\u00fc\u00fcd tahaksime failipuust eraldada vaid faili nime (selleks v\u00f5iks olla n\u00e4iteks pilt, mida tahaksime ekraanil kuvada), tuleks esmalt importida moodul, mis sisaldab operatsioonis\u00fcsteemiga seotud funktsioone &#8211; <em><strong>import os<\/strong><\/em>. Et faili nime failipuust eraldada, tuleks kasutada <em>split()<\/em>-funktsiooni.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">import os\r\n\r\npuu, failinimi = os.path.split(fail)<\/pre>\n<h2>Piltide sisestamine<\/h2>\n<p>Kui meil on failinimi teada, saab graafikaaknasse kuvada selle pildi (see meetod toimib vaid .png formaadis piltidega! Uuri 5. peat\u00fckist, kuidas saaks kasutada ka n\u00e4iteks .jpg pilte).<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">sg.Image(failinimi)<\/pre>\n<p>&nbsp;<\/p>\n<p>Seega selles peat\u00fckis \u00f5ppisid kasutama erinevaid elemente, mille abil oma programmi kasutajaliidest veelgi mitmekesisemaks muuta. Samuti tead n\u00fc\u00fcd, kuidas nupule vajutades avada faili v\u00f5i pilti!<\/p>\n","protected":false},"author":17,"menu_order":3,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-111","chapter","type-chapter","status-publish","hentry"],"part":102,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/users\/17"}],"version-history":[{"count":7,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/111\/revisions"}],"predecessor-version":[{"id":754,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/111\/revisions\/754"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/parts\/102"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/111\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=111"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=111"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=111"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}