{"id":109,"date":"2020-11-03T09:30:40","date_gmt":"2020-11-03T09:30:40","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/?post_type=chapter&#038;p=109"},"modified":"2021-05-06T17:29:19","modified_gmt":"2021-05-06T17:29:19","slug":"pysimplegui-nupuvajutus-pop-up-aken-ja-uue-graafikaakna-avamine","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/pysimplegui-nupuvajutus-pop-up-aken-ja-uue-graafikaakna-avamine\/","title":{"raw":"PySimpleGUI nupuvajutus, h\u00fcpikaken ja uue graafikaakna avamine","rendered":"PySimpleGUI nupuvajutus, h\u00fcpikaken ja uue graafikaakna avamine"},"content":{"raw":"Oleme n\u00fc\u00fcdseks tutvunud kasutajaliidese lihtsamate p\u00f5hielementidega. Vaatame n\u00fc\u00fcd m\u00f5ningaid v\u00f5tteid, mille abil saab veelgi p\u00f5nevamaid ja kasulikumaid programme teha!\r\n<h2>Nupuvajutus ja arvutustehe<\/h2>\r\nVahel on kasutaja k\u00e4est vaja k\u00fcsida ka arve ning nendega n\u00e4iteks m\u00f5ni arvutustehe sooritada. Vaatame n\u00e4idet, kus kasutajalt k\u00fcsitakse mingi t\u00e4isarv ning seej\u00e4rel arvutatakse funktsiooni abiga selle ruut.\r\n\r\nEsmalt impordime PySimpleGUI klassid ja funktsioonid, s\u00e4testame akna v\u00e4rviteema ning\u00a0 koostamegi funktsiooni, mis arvutustehte sooritab. Tuleta meelde, kuidas Pythonis astendamine k\u00e4is!\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')  \r\n\r\n#funktsioon arvutustehte sooritamiseks\r\ndef arvuta(arv):\r\n    arvu_ruut = arv**2\r\n    return arvu_ruut<\/pre>\r\nSeej\u00e4rel paneme paika paigutuse juba tuttavate elementidega. Loome v\u00f5tmed tekstisisestuskastile ja tekstisildile. Samuti loome akna sobiva pealkirja ja paigutusega, m\u00e4\u00e4rame ka selle suuruse.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">paigutus = [[sg.Text('Mis on arvu ruut?', text_color='white', font=('Helvetica', 15))],\r\n            [sg.Text('Sisesta t\u00e4isarv 0-100:', size=(20, 1)), sg.Input(key='sisestatud_arv')],\r\n            [sg.Submit('Arvuta!'), sg.Cancel('Sulge aken')],\r\n            [sg.Text('_' * 30)],\r\n            [sg.Text('Arvu ... ruut on ... ', size=(20,1), key='tekstisilt')]]\r\n\r\naken = sg.Window('Arvutustehe', paigutus, size=(400,200))\r\n<\/pre>\r\nN\u00fc\u00fcd siseneme <em>while<\/em>-ts\u00fcklisse. Kui aken pannakse ristist kinni v\u00f5i kui vajutatakse \u2018Sulge aken!\u2019 nuppu, l\u00f5petab programm t\u00f6\u00f6.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">while True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n            break<\/pre>\r\nKui aga vajutati \u2018Arvuta!\u2019 nuppu, saame esmalt k\u00e4tte sisendi. See on meil salvestatud s\u00f5nastikku ning sellele vastav v\u00f5ti on <em>sisestatud_arv<\/em>.\r\n\r\nJ\u00e4lgi kindlasti, et sisend tuleb (t\u00e4is)arvuks teisendada, et arvutustehet sooritada <em><strong>int(...)<\/strong><\/em> - vastasel juhul saame veateate!\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus == 'Arvuta!':\r\n        sisend1 = int(v22rtused['sisestatud_arv'])\r\n<\/pre>\r\nN\u00fc\u00fcd kasutame \u00fclal loodud funktsiooni, mis meie eest v\u00e4ga mugavalt vastuse leiab. Funktsiooni argumendiks m\u00e4\u00e4rame sisendi, mille just leidsime. Salvestame vastuse muutujasse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">vastus.<\/code>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">vastus = arvuta(sisend1)<\/pre>\r\nJa ongi aeg tekstisildile kuvada sisestatud arvu ja tehte vastuse! Siin peame tegema vastupidise teisenduse - arvud tuleb teha s\u00f5nedeks, et neid tekstina aknas kuvada <em><strong>str(...)<\/strong><\/em>.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">aken['tekstisilt'].update('Arvu ' + str(sisend1) + ' ruut on ' + str(vastus))\r\naken['sisestatud_arv'].update('')<\/pre>\r\n\u00c4ra unusta, et l\u00f5pus tuleb aken sulgeda!\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">aken.close()<\/pre>\r\nJa programm ongi valmis!\r\n\r\nTerve programm n\u00e4eb seega v\u00e4lja selline:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')  \r\n\r\n#funktsioon arvutustehte sooritamiseks\r\ndef arvuta(arv):\r\n    arvu_ruut = arv**2\r\n    return arvu_ruut\r\n\r\npaigutus = [[sg.Text('Mis on arvu ruut?', text_color='white', font=('Helvetica', 15))],\r\n            [sg.Text('Sisesta t\u00e4isarv 0-100:', size=(20, 1)), sg.Input(key='sisestatud_arv')],\r\n            [sg.Submit('Arvuta!'), sg.Cancel('Sulge aken')],\r\n            [sg.Text('_' * 30)],\r\n            [sg.Text('Arvu ... ruut on ... ', size=(20,1), key='tekstisilt')]]\r\n\r\naken = sg.Window('Arvutustehe', paigutus, size=(400,200))\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n            break\r\n    if syndmus == 'Arvuta!':\r\n        \r\n            #teisendame sisendi t\u00e4isarvuks, et sellega saaks arvutustehet sooritada \r\n            sisend1 = int(v22rtused['sisestatud_arv'])\r\n        \r\n            #kasutame funktsiooni tehte sooritamiseks\r\n            #vastuse salvestame muutujasse vastus\r\n            vastus = arvuta(sisend1)\r\n            \r\n            aken['tekstisilt'].update('Arvu ' + str(sisend1) + ' ruut on ' + str(vastus))\r\n            aken['sisestatud_arv'].update('')\r\n                    \r\naken.close()<\/pre>\r\nAvanema peaks esmalt selline aken:\r\n\r\n<img class=\"alignnone wp-image-409\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-essa-aken-300x182.png\" alt=\"\" width=\"274\" height=\"166\" \/>\r\n\r\nNing p\u00e4rast arvu sisestamist ja nupuvajutust:\r\n\r\n<img class=\"alignnone wp-image-410\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-teine-pilt-300x185.png\" alt=\"\" width=\"281\" height=\"173\" \/>\r\n<h2>H\u00fcpikaken<\/h2>\r\nLoome <strong><em>pop-up<\/em>- ehk h\u00fcpikakna<\/strong>, mis avaneb p\u00e4rast p\u00f5hiakna sulgemist. Selle akna erip\u00e4raks on see, et selliselt saab kasutajale mugavalt kuvada erinevat infot n\u00e4iteks siis, kui m\u00f5nes programmis tekib veateate akna vajadus v\u00f5i kui on vaja m\u00f5nda muud lihtsamat infot kuvada.\r\n\r\nJ\u00e4tkame eelmist n\u00e4idet ning kontrollime, kas sisestatud arv oli \u00f5iges vahemikus (0-100). Kui jah, tuleb sooritada arvutustehe ning selle vastus kuvada h\u00fcpikaknas. H\u00fcpikakna saame luua, kui kasutame funktsiooni <em><strong>sg.Popup()<\/strong><\/em>. Sulgude sisse kirjutame teksti, mida kuvada selles h\u00fcpikaknas. Pane t\u00e4hele, et <em>int<\/em>- v\u00f5i <em>float<\/em>-t\u00fc\u00fcpi muutujad tuleb s\u00f5nedeks teisendada, et neid saaks aknas kuvada!\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus == 'Arvuta!':        \r\n        sisend1 = int(v22rtused['sisestatud_arv'])        \r\n        if sisend1 &gt;= 0 and sisend1 &lt;= 100:\r\n            #sulgeme akna kohe, et avada h\u00fcpikaken    \r\n            aken.close()             \r\n            vastus = arvuta(sisend1) \r\n          #loome h\u00fcpikakna!          \r\n            sg.Popup('Arvu ' + str(sisend1) + ' ruut on ' + str(vastus))<\/pre>\r\nKui sisestatud arv ei olnud n\u00f5utud vahemikus, siis kuvame ekraanile h\u00fcpikakna, mis kasutajat veast teavitab. Selles aknas on \u2018OK\u2019 nupp, millele vajutades saab programm tegevust j\u00e4tkata.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">else:\r\n    sg.Popup('Palun sisesta arv \u00f5iges vahemikus!')<\/pre>\r\nEt v\u00e4ltida v\u00f5imalikku segadust treppimisega, on siin ka terve kood:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')  \r\n\r\n#funktsioon arvutustehte sooritamiseks\r\ndef arvuta(arv):\r\n    arvu_ruut = arv**2\r\n    return arvu_ruut\r\n\r\npaigutus = [[sg.Text('Mis on arvu ruut?', text_color='white', font=('Helvetica', 15))],\r\n            [sg.Text('Sisesta t\u00e4isarv 0-100:', size=(20, 1)), sg.Input(key='sisestatud_arv')],\r\n            [sg.Submit('Arvuta!'), sg.Cancel('Sulge aken')],\r\n            [sg.Text('_' * 30)],\r\n            [sg.Text('Arvu ... ruut on ... ', size=(20,1), key='tekstisilt')]]\r\n\r\naken = sg.Window('Arvutustehe', paigutus, size=(400,200))\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n            break\r\n    if syndmus == 'Arvuta!':\r\n        \r\n        #teisendame sisendid t\u00e4isarvuks, et arvutustehet sooritada\r\n            sisend1 = int(v22rtused['sisestatud_arv'])\r\n        \r\n            if sisend1 &gt;= 0 and sisend1 &lt;= 100:\r\n              aken.close()\r\n                #kasutame funktsiooni tehte sooritamiseks\r\n                #vastuse salvestame muutujasse vastus\r\n              vastus = arvuta(sisend1)\r\n                        \r\n              sg.Popup('Arvu ' + str(sisend1) + ' ruut on ' + str(vastus))\r\n            else:\r\n              sg.Popup('Palun sisesta arv \u00f5iges vahemikus!')\r\n        \r\naken.close()<\/pre>\r\nP\u00e4rast programmi k\u00e4ivitamist, \u00f5iges vahemikus arvu sisestamist ja \u201cArvuta!\u201d-nupule vajutamist peaks avanema h\u00fcpikaken:\r\n\r\n<img class=\"alignnone size-full wp-image-412\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/popup-ruut.png\" alt=\"\" width=\"184\" height=\"127\" \/>\r\n\r\nVales vahemikus arvu sisestamisel avaneb aga selline aken:\r\n\r\n<img class=\"alignnone wp-image-760 size-full\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/2.-error-popup.png\" alt=\"\" width=\"286\" height=\"110\" \/>\r\n\r\nAknasse saab lisaks \u2018OK\u2019-nupule tegelikult paigutada ka teisigi nuppe. Lisav\u00f5imalusi v\u00f5id uurida <a href=\"https:\/\/pysimplegui.readthedocs.io\/en\/latest\/#popup-output\">siit<\/a>.\r\n<h2>Uue graafikaakne avamine<\/h2>\r\nKuidas aga teha nii, et graafikaaknas nupule vajutades ilmuks ekraanile j\u00e4rgmine aken, kus saaks j\u00e4lle midagi kasutajalt k\u00fcsida ning seej\u00e4rel sisestatud vastuseid omakorda h\u00fcpikaknas kuvada?\r\n\r\nTegelikult pole siingi midagi keerulist, sest tuleb korrata juba tuttavat teemat - luua uus j\u00e4rjend uute elementidega (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">paigutus2<\/code>), luua uus aken, saada k\u00e4tte uued sisendid.\r\n\r\nKatsetame seda \u00fche lihtsa arvutusprogrammi abil - esimeses aknas k\u00fcsitakse kasutajalt kahte arvu, millega tehakse liitmistehe ning teise akna sisenditega sooritatakse lahutamistehe. Sisestatud arve ning tehete vastuseid kuvame h\u00fcpikaknas.\r\n\r\n<strong>PS!<\/strong> Tuleta meelde, et tekstikastist saame kasutaja sisendid s\u00f5ne ehk <em>string<\/em> kujul. See t\u00e4hendab, et arvutustehte jaoks peame need arvudeks (siin n\u00e4ites t\u00e4isarvuks ehk <em>integeriks<\/em>) teisendama.\r\n\r\nEsmalt impordime vajalikud moodulid, s\u00e4testame teema, loome paigutuse ning graafikaakna.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')\r\n\r\npaigutus = [[sg.Text('Liitmine ', text_color='white', font=('Helvetica', 15))],\r\n      [sg.Text('Sisesta t\u00e4isarv 0-10: ', size=(17, 1)), sg.Input()],\r\n      [sg.Text('Sisesta t\u00e4isarv 0-10:  ', size=(17, 1)), sg.Input()],\r\n      [sg.Submit('LIIDA!'), sg.Cancel('Sulge aken')]]\r\n\r\naken = sg.Window('Arvutustehted', paigutus, size=(300,200))<\/pre>\r\nSeej\u00e4rel siseneme <em>while<\/em>-ts\u00fcklisse ning salvestame aknast saadud info muutujatesse. Samuti lisame tingimuslause juhuks, kui aken suletakse.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">while True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n        break\r\n<\/pre>\r\nKui aga vajutati nuppu \u201cLIIDA!\u201d, suletakse esmalt esimene graafikaaken. Seej\u00e4rel salvestame sisendid muutujatesse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sisend1<\/code> ning <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sisend2<\/code> ning teisendame need t\u00e4isarvudeks<em><strong> int()<\/strong><\/em>, et saaks liitmistehet sooritada.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus == 'LIIDA!':\r\n     aken.close()\r\n     sisend1 = int(v22rtused[0])\r\n     sisend2 =  int(v22rtused[1])\r\n     summa = sisend1 + sisend2\r\n<\/pre>\r\nOn aeg luua j\u00e4rgmise akna paigutus. See on identne eelmisega, kuid n\u00fc\u00fcd peab kasutaja sisestama arvud, mis lahutatakse \u00fcksteisest. Pane t\u00e4hele, et me oleme endiselt <em>while<\/em>-ts\u00fckli sees!\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">#loome uue j\u00e4rjendi uute elementidega\r\n paigutus2 = [[sg.Text('Lahutamine: ', text_color='white', font=('Helvetica', 15))],\r\n [sg.Text('Sisesta t\u00e4isarv 0-10: ', size=(17, 1)), sg.InputText()],\r\n [sg.Text('Sisesta arv 0-10: ', size=(17, 1)), sg.InputText()],\r\n [sg.Submit('LAHUTA!'), sg.Cancel('Sulge aken')]]\r\n        \r\n#loome akna uue j\u00e4rjendiga\r\naken = sg.Window('Andmed 2', paigutus2, size=(300,200))\r\n        \r\nsyndmus2, v22rtused2 = aken.read()\r\n<\/pre>\r\nN\u00fc\u00fcd tuleb j\u00e4lle kontrollida juhtu, kui aken pandi kinni.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus2 == sg.WIN_CLOSED or syndmus2 == 'Sulge aken':\r\n    break<\/pre>\r\nKui mitte, tuleb taas salvestada sisendid muutujatesse ning sooritada arvutustehe.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus2 == 'LAHUTA!':\r\n    aken.close()\r\n            \r\n    #teisendame teisest aknast saadud sisendid arvudeks, et nendega saaks lahutustehet sooritada\r\n    sisend3 = int(v22rtused2[0])\r\n    sisend4 = int(v22rtused2[1])\r\n            \r\n    vahe = sisend3 - sisend4<\/pre>\r\nOlemegi kasutajalt kogu vajaliku info k\u00e4tte saanud. N\u00fc\u00fcd v\u00f5iks nii liitmis-kui ka lahutamistehet ning nende vastuseid kuvada h\u00fcpikaknas.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">#kuvame ekraanile sisendid ja arvutustehete vastused mugaval kujul\r\nsg.Popup('Tehete vastused: ',\r\n         str(sisend1) + ' + ' + str(sisend2) + ' = ' + str(summa),\r\n         str(sisend3) + ' - ' + str(sisend4) + ' = ' + str(vahe))<\/pre>\r\nK\u00f5ige l\u00f5ppu tuleb ka lisada rida, millega pannakse aken kinni (siia j\u00f5utakse siis, kui aken pandi ristist kinni v\u00f5i vajutati \u2018Sulge aken\u2019 nuppu).\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">aken.close()<\/pre>\r\nTerve programm:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')\r\n\r\npaigutus = [[sg.Text('Liitmine ', text_color='white', font=('Helvetica', 15))],\r\n      [sg.Text('Sisesta t\u00e4isarv 0-10: ', size=(17, 1)), sg.Input()],\r\n      [sg.Text('Sisesta t\u00e4isarv 0-10:  ', size=(17, 1)), sg.Input()],\r\n      [sg.Submit('LIIDA!'), sg.Cancel('Sulge aken')]]\r\n\r\naken = sg.Window('Arvutustehted', paigutus, size=(300,200))\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n            break\r\n    if syndmus == 'LIIDA!':\r\n            aken.close()\r\n        \r\n            #teisendame sisendid t\u00e4isarvudeks, et nendega saaks liitmistehet sooritada\r\n            sisend1 = int(v22rtused[0])\r\n            sisend2 =  int(v22rtused[1])\r\n        \r\n            summa = sisend1 + sisend2\r\n        \r\n            #loome uue j\u00e4rjendi uute elementidega\r\n            paigutus2 = [[sg.Text('Lahutamine: ', text_color='white', font=('Helvetica', 15))],\r\n                  [sg.Text('Sisesta t\u00e4isarv 0-10: ', size=(17, 1)), sg.InputText()],\r\n                  [sg.Text('Sisesta arv 0-10: ', size=(17, 1)), sg.InputText()],\r\n                  [sg.Submit('LAHUTA!'), sg.Cancel('Sulge aken')]]\r\n        \r\n            #loome akna uue j\u00e4rjendiga\r\n            aken = sg.Window('Andmed 2', paigutus2, size=(300,200))\r\n        \r\n            syndmus2, v22rtused2 = aken.read()\r\n        \r\n            #kui aken pandi kinni, l\u00f5petab programm t\u00f6\u00f6\r\n            if syndmus2 == sg.WIN_CLOSED or syndmus2 == 'Sulge aken':\r\n            break\r\n        \r\n            #kui vajutatakse nuppu 'LAHUTA!', pannakse aken kinni ja avatakse uus\r\n            if syndmus2 == 'LAHUTA!':\r\n            \r\n              aken.close()\r\n            \r\n              #teisendame teisest aknast saadud sisendid arvudeks, et nendega saaks lahutustehet sooritada\r\n              sisend3 = int(v22rtused2[0])\r\n              sisend4 = int(v22rtused2[1])\r\n            \r\n              vahe = sisend3-sisend4\r\n            \r\n              #kuvame ekraanile sisendid ja arvutustehete vastused     mugaval kujul\r\n              sg.Popup('Tehete vastused: ',\r\n                 str(sisend1) + ' + ' + str(sisend2) + ' = ' + str(summa),\r\n                 str(sisend3) + ' - ' + str(sisend4) + ' = ' + str(vahe))\r\n        \r\naken.close()<\/pre>\r\nAvanema peaksid j\u00e4rjest sellised aknad:\r\n<ol>\r\n \t<li><img class=\"alignnone wp-image-413\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-1-300x233.png\" alt=\"\" width=\"230\" height=\"179\" \/><\/li>\r\n \t<li><img class=\"alignnone wp-image-414\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-2.png\" alt=\"\" width=\"230\" height=\"188\" \/><\/li>\r\n \t<li><img class=\"alignnone wp-image-415\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-3-popup.png\" alt=\"\" width=\"173\" height=\"179\" \/><\/li>\r\n<\/ol>\r\nSeega selles peat\u00fckis \u00f5ppisid, kuidas integreerida erinevaid v\u00f5tteid ja elemente oma programmi - \u00f5ppisid looma h\u00fcpikakent, uut graafikaaknet, kasutama programmis funktsiooni ja ts\u00fckleid. \u00dchtlasi katsetasid, kuidas muuta programmi tegevust vastavalt sellele, mida graafikaaknasse sisestati.","rendered":"<p>Oleme n\u00fc\u00fcdseks tutvunud kasutajaliidese lihtsamate p\u00f5hielementidega. Vaatame n\u00fc\u00fcd m\u00f5ningaid v\u00f5tteid, mille abil saab veelgi p\u00f5nevamaid ja kasulikumaid programme teha!<\/p>\n<h2>Nupuvajutus ja arvutustehe<\/h2>\n<p>Vahel on kasutaja k\u00e4est vaja k\u00fcsida ka arve ning nendega n\u00e4iteks m\u00f5ni arvutustehe sooritada. Vaatame n\u00e4idet, kus kasutajalt k\u00fcsitakse mingi t\u00e4isarv ning seej\u00e4rel arvutatakse funktsiooni abiga selle ruut.<\/p>\n<p>Esmalt impordime PySimpleGUI klassid ja funktsioonid, s\u00e4testame akna v\u00e4rviteema ning\u00a0 koostamegi funktsiooni, mis arvutustehte sooritab. Tuleta meelde, kuidas Pythonis astendamine k\u00e4is!<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')  \r\n\r\n#funktsioon arvutustehte sooritamiseks\r\ndef arvuta(arv):\r\n    arvu_ruut = arv**2\r\n    return arvu_ruut<\/pre>\n<p>Seej\u00e4rel paneme paika paigutuse juba tuttavate elementidega. Loome v\u00f5tmed tekstisisestuskastile ja tekstisildile. Samuti loome akna sobiva pealkirja ja paigutusega, m\u00e4\u00e4rame ka selle suuruse.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">paigutus = [[sg.Text('Mis on arvu ruut?', text_color='white', font=('Helvetica', 15))],\r\n            [sg.Text('Sisesta t\u00e4isarv 0-100:', size=(20, 1)), sg.Input(key='sisestatud_arv')],\r\n            [sg.Submit('Arvuta!'), sg.Cancel('Sulge aken')],\r\n            [sg.Text('_' * 30)],\r\n            [sg.Text('Arvu ... ruut on ... ', size=(20,1), key='tekstisilt')]]\r\n\r\naken = sg.Window('Arvutustehe', paigutus, size=(400,200))\r\n<\/pre>\n<p>N\u00fc\u00fcd siseneme <em>while<\/em>-ts\u00fcklisse. Kui aken pannakse ristist kinni v\u00f5i kui vajutatakse \u2018Sulge aken!\u2019 nuppu, l\u00f5petab programm t\u00f6\u00f6.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">while True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n            break<\/pre>\n<p>Kui aga vajutati \u2018Arvuta!\u2019 nuppu, saame esmalt k\u00e4tte sisendi. See on meil salvestatud s\u00f5nastikku ning sellele vastav v\u00f5ti on <em>sisestatud_arv<\/em>.<\/p>\n<p>J\u00e4lgi kindlasti, et sisend tuleb (t\u00e4is)arvuks teisendada, et arvutustehet sooritada <em><strong>int(&#8230;)<\/strong><\/em> &#8211; vastasel juhul saame veateate!<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus == 'Arvuta!':\r\n        sisend1 = int(v22rtused['sisestatud_arv'])\r\n<\/pre>\n<p>N\u00fc\u00fcd kasutame \u00fclal loodud funktsiooni, mis meie eest v\u00e4ga mugavalt vastuse leiab. Funktsiooni argumendiks m\u00e4\u00e4rame sisendi, mille just leidsime. Salvestame vastuse muutujasse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">vastus.<\/code><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">vastus = arvuta(sisend1)<\/pre>\n<p>Ja ongi aeg tekstisildile kuvada sisestatud arvu ja tehte vastuse! Siin peame tegema vastupidise teisenduse &#8211; arvud tuleb teha s\u00f5nedeks, et neid tekstina aknas kuvada <em><strong>str(&#8230;)<\/strong><\/em>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">aken['tekstisilt'].update('Arvu ' + str(sisend1) + ' ruut on ' + str(vastus))\r\naken['sisestatud_arv'].update('')<\/pre>\n<p>\u00c4ra unusta, et l\u00f5pus tuleb aken sulgeda!<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">aken.close()<\/pre>\n<p>Ja programm ongi valmis!<\/p>\n<p>Terve programm n\u00e4eb seega v\u00e4lja selline:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')  \r\n\r\n#funktsioon arvutustehte sooritamiseks\r\ndef arvuta(arv):\r\n    arvu_ruut = arv**2\r\n    return arvu_ruut\r\n\r\npaigutus = [[sg.Text('Mis on arvu ruut?', text_color='white', font=('Helvetica', 15))],\r\n            [sg.Text('Sisesta t\u00e4isarv 0-100:', size=(20, 1)), sg.Input(key='sisestatud_arv')],\r\n            [sg.Submit('Arvuta!'), sg.Cancel('Sulge aken')],\r\n            [sg.Text('_' * 30)],\r\n            [sg.Text('Arvu ... ruut on ... ', size=(20,1), key='tekstisilt')]]\r\n\r\naken = sg.Window('Arvutustehe', paigutus, size=(400,200))\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n            break\r\n    if syndmus == 'Arvuta!':\r\n        \r\n            #teisendame sisendi t\u00e4isarvuks, et sellega saaks arvutustehet sooritada \r\n            sisend1 = int(v22rtused['sisestatud_arv'])\r\n        \r\n            #kasutame funktsiooni tehte sooritamiseks\r\n            #vastuse salvestame muutujasse vastus\r\n            vastus = arvuta(sisend1)\r\n            \r\n            aken['tekstisilt'].update('Arvu ' + str(sisend1) + ' ruut on ' + str(vastus))\r\n            aken['sisestatud_arv'].update('')\r\n                    \r\naken.close()<\/pre>\n<p>Avanema peaks esmalt selline aken:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-409\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-essa-aken-300x182.png\" alt=\"\" width=\"274\" height=\"166\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-essa-aken-300x182.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-essa-aken-65x40.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-essa-aken-225x137.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-essa-aken-350x213.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-essa-aken.png 403w\" sizes=\"auto, (max-width: 274px) 100vw, 274px\" \/><\/p>\n<p>Ning p\u00e4rast arvu sisestamist ja nupuvajutust:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-410\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-teine-pilt-300x185.png\" alt=\"\" width=\"281\" height=\"173\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-teine-pilt-300x185.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-teine-pilt-65x40.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-teine-pilt-225x138.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-teine-pilt-350x215.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/arvu-ruut-teine-pilt.png 400w\" sizes=\"auto, (max-width: 281px) 100vw, 281px\" \/><\/p>\n<h2>H\u00fcpikaken<\/h2>\n<p>Loome <strong><em>pop-up<\/em>&#8211; ehk h\u00fcpikakna<\/strong>, mis avaneb p\u00e4rast p\u00f5hiakna sulgemist. Selle akna erip\u00e4raks on see, et selliselt saab kasutajale mugavalt kuvada erinevat infot n\u00e4iteks siis, kui m\u00f5nes programmis tekib veateate akna vajadus v\u00f5i kui on vaja m\u00f5nda muud lihtsamat infot kuvada.<\/p>\n<p>J\u00e4tkame eelmist n\u00e4idet ning kontrollime, kas sisestatud arv oli \u00f5iges vahemikus (0-100). Kui jah, tuleb sooritada arvutustehe ning selle vastus kuvada h\u00fcpikaknas. H\u00fcpikakna saame luua, kui kasutame funktsiooni <em><strong>sg.Popup()<\/strong><\/em>. Sulgude sisse kirjutame teksti, mida kuvada selles h\u00fcpikaknas. Pane t\u00e4hele, et <em>int<\/em>&#8211; v\u00f5i <em>float<\/em>-t\u00fc\u00fcpi muutujad tuleb s\u00f5nedeks teisendada, et neid saaks aknas kuvada!<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus == 'Arvuta!':        \r\n        sisend1 = int(v22rtused['sisestatud_arv'])        \r\n        if sisend1 &gt;= 0 and sisend1 &lt;= 100:\r\n            #sulgeme akna kohe, et avada h\u00fcpikaken    \r\n            aken.close()             \r\n            vastus = arvuta(sisend1) \r\n          #loome h\u00fcpikakna!          \r\n            sg.Popup('Arvu ' + str(sisend1) + ' ruut on ' + str(vastus))<\/pre>\n<p>Kui sisestatud arv ei olnud n\u00f5utud vahemikus, siis kuvame ekraanile h\u00fcpikakna, mis kasutajat veast teavitab. Selles aknas on \u2018OK\u2019 nupp, millele vajutades saab programm tegevust j\u00e4tkata.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">else:\r\n    sg.Popup('Palun sisesta arv \u00f5iges vahemikus!')<\/pre>\n<p>Et v\u00e4ltida v\u00f5imalikku segadust treppimisega, on siin ka terve kood:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')  \r\n\r\n#funktsioon arvutustehte sooritamiseks\r\ndef arvuta(arv):\r\n    arvu_ruut = arv**2\r\n    return arvu_ruut\r\n\r\npaigutus = [[sg.Text('Mis on arvu ruut?', text_color='white', font=('Helvetica', 15))],\r\n            [sg.Text('Sisesta t\u00e4isarv 0-100:', size=(20, 1)), sg.Input(key='sisestatud_arv')],\r\n            [sg.Submit('Arvuta!'), sg.Cancel('Sulge aken')],\r\n            [sg.Text('_' * 30)],\r\n            [sg.Text('Arvu ... ruut on ... ', size=(20,1), key='tekstisilt')]]\r\n\r\naken = sg.Window('Arvutustehe', paigutus, size=(400,200))\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n            break\r\n    if syndmus == 'Arvuta!':\r\n        \r\n        #teisendame sisendid t\u00e4isarvuks, et arvutustehet sooritada\r\n            sisend1 = int(v22rtused['sisestatud_arv'])\r\n        \r\n            if sisend1 &gt;= 0 and sisend1 &lt;= 100:\r\n              aken.close()\r\n                #kasutame funktsiooni tehte sooritamiseks\r\n                #vastuse salvestame muutujasse vastus\r\n              vastus = arvuta(sisend1)\r\n                        \r\n              sg.Popup('Arvu ' + str(sisend1) + ' ruut on ' + str(vastus))\r\n            else:\r\n              sg.Popup('Palun sisesta arv \u00f5iges vahemikus!')\r\n        \r\naken.close()<\/pre>\n<p>P\u00e4rast programmi k\u00e4ivitamist, \u00f5iges vahemikus arvu sisestamist ja \u201cArvuta!\u201d-nupule vajutamist peaks avanema h\u00fcpikaken:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-412\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/popup-ruut.png\" alt=\"\" width=\"184\" height=\"127\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/popup-ruut.png 184w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/popup-ruut-65x45.png 65w\" sizes=\"auto, (max-width: 184px) 100vw, 184px\" \/><\/p>\n<p>Vales vahemikus arvu sisestamisel avaneb aga selline aken:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-760 size-full\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/2.-error-popup.png\" alt=\"\" width=\"286\" height=\"110\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/2.-error-popup.png 286w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/2.-error-popup-65x25.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/2.-error-popup-225x87.png 225w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><\/p>\n<p>Aknasse saab lisaks \u2018OK\u2019-nupule tegelikult paigutada ka teisigi nuppe. Lisav\u00f5imalusi v\u00f5id uurida <a href=\"https:\/\/pysimplegui.readthedocs.io\/en\/latest\/#popup-output\">siit<\/a>.<\/p>\n<h2>Uue graafikaakne avamine<\/h2>\n<p>Kuidas aga teha nii, et graafikaaknas nupule vajutades ilmuks ekraanile j\u00e4rgmine aken, kus saaks j\u00e4lle midagi kasutajalt k\u00fcsida ning seej\u00e4rel sisestatud vastuseid omakorda h\u00fcpikaknas kuvada?<\/p>\n<p>Tegelikult pole siingi midagi keerulist, sest tuleb korrata juba tuttavat teemat &#8211; luua uus j\u00e4rjend uute elementidega (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">paigutus2<\/code>), luua uus aken, saada k\u00e4tte uued sisendid.<\/p>\n<p>Katsetame seda \u00fche lihtsa arvutusprogrammi abil &#8211; esimeses aknas k\u00fcsitakse kasutajalt kahte arvu, millega tehakse liitmistehe ning teise akna sisenditega sooritatakse lahutamistehe. Sisestatud arve ning tehete vastuseid kuvame h\u00fcpikaknas.<\/p>\n<p><strong>PS!<\/strong> Tuleta meelde, et tekstikastist saame kasutaja sisendid s\u00f5ne ehk <em>string<\/em> kujul. See t\u00e4hendab, et arvutustehte jaoks peame need arvudeks (siin n\u00e4ites t\u00e4isarvuks ehk <em>integeriks<\/em>) teisendama.<\/p>\n<p>Esmalt impordime vajalikud moodulid, s\u00e4testame teema, loome paigutuse ning graafikaakna.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')\r\n\r\npaigutus = [[sg.Text('Liitmine ', text_color='white', font=('Helvetica', 15))],\r\n      [sg.Text('Sisesta t\u00e4isarv 0-10: ', size=(17, 1)), sg.Input()],\r\n      [sg.Text('Sisesta t\u00e4isarv 0-10:  ', size=(17, 1)), sg.Input()],\r\n      [sg.Submit('LIIDA!'), sg.Cancel('Sulge aken')]]\r\n\r\naken = sg.Window('Arvutustehted', paigutus, size=(300,200))<\/pre>\n<p>Seej\u00e4rel siseneme <em>while<\/em>-ts\u00fcklisse ning salvestame aknast saadud info muutujatesse. Samuti lisame tingimuslause juhuks, kui aken suletakse.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">while True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n        break\r\n<\/pre>\n<p>Kui aga vajutati nuppu \u201cLIIDA!\u201d, suletakse esmalt esimene graafikaaken. Seej\u00e4rel salvestame sisendid muutujatesse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sisend1<\/code> ning <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sisend2<\/code> ning teisendame need t\u00e4isarvudeks<em><strong> int()<\/strong><\/em>, et saaks liitmistehet sooritada.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus == 'LIIDA!':\r\n     aken.close()\r\n     sisend1 = int(v22rtused[0])\r\n     sisend2 =  int(v22rtused[1])\r\n     summa = sisend1 + sisend2\r\n<\/pre>\n<p>On aeg luua j\u00e4rgmise akna paigutus. See on identne eelmisega, kuid n\u00fc\u00fcd peab kasutaja sisestama arvud, mis lahutatakse \u00fcksteisest. Pane t\u00e4hele, et me oleme endiselt <em>while<\/em>-ts\u00fckli sees!<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">#loome uue j\u00e4rjendi uute elementidega\r\n paigutus2 = [[sg.Text('Lahutamine: ', text_color='white', font=('Helvetica', 15))],\r\n [sg.Text('Sisesta t\u00e4isarv 0-10: ', size=(17, 1)), sg.InputText()],\r\n [sg.Text('Sisesta arv 0-10: ', size=(17, 1)), sg.InputText()],\r\n [sg.Submit('LAHUTA!'), sg.Cancel('Sulge aken')]]\r\n        \r\n#loome akna uue j\u00e4rjendiga\r\naken = sg.Window('Andmed 2', paigutus2, size=(300,200))\r\n        \r\nsyndmus2, v22rtused2 = aken.read()\r\n<\/pre>\n<p>N\u00fc\u00fcd tuleb j\u00e4lle kontrollida juhtu, kui aken pandi kinni.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus2 == sg.WIN_CLOSED or syndmus2 == 'Sulge aken':\r\n    break<\/pre>\n<p>Kui mitte, tuleb taas salvestada sisendid muutujatesse ning sooritada arvutustehe.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">if syndmus2 == 'LAHUTA!':\r\n    aken.close()\r\n            \r\n    #teisendame teisest aknast saadud sisendid arvudeks, et nendega saaks lahutustehet sooritada\r\n    sisend3 = int(v22rtused2[0])\r\n    sisend4 = int(v22rtused2[1])\r\n            \r\n    vahe = sisend3 - sisend4<\/pre>\n<p>Olemegi kasutajalt kogu vajaliku info k\u00e4tte saanud. N\u00fc\u00fcd v\u00f5iks nii liitmis-kui ka lahutamistehet ning nende vastuseid kuvada h\u00fcpikaknas.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">#kuvame ekraanile sisendid ja arvutustehete vastused mugaval kujul\r\nsg.Popup('Tehete vastused: ',\r\n         str(sisend1) + ' + ' + str(sisend2) + ' = ' + str(summa),\r\n         str(sisend3) + ' - ' + str(sisend4) + ' = ' + str(vahe))<\/pre>\n<p>K\u00f5ige l\u00f5ppu tuleb ka lisada rida, millega pannakse aken kinni (siia j\u00f5utakse siis, kui aken pandi ristist kinni v\u00f5i vajutati \u2018Sulge aken\u2019 nuppu).<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">aken.close()<\/pre>\n<p>Terve programm:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\n\r\nsg.theme('Dark Blue 3')\r\n\r\npaigutus = [[sg.Text('Liitmine ', text_color='white', font=('Helvetica', 15))],\r\n      [sg.Text('Sisesta t\u00e4isarv 0-10: ', size=(17, 1)), sg.Input()],\r\n      [sg.Text('Sisesta t\u00e4isarv 0-10:  ', size=(17, 1)), sg.Input()],\r\n      [sg.Submit('LIIDA!'), sg.Cancel('Sulge aken')]]\r\n\r\naken = sg.Window('Arvutustehted', paigutus, size=(300,200))\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n            break\r\n    if syndmus == 'LIIDA!':\r\n            aken.close()\r\n        \r\n            #teisendame sisendid t\u00e4isarvudeks, et nendega saaks liitmistehet sooritada\r\n            sisend1 = int(v22rtused[0])\r\n            sisend2 =  int(v22rtused[1])\r\n        \r\n            summa = sisend1 + sisend2\r\n        \r\n            #loome uue j\u00e4rjendi uute elementidega\r\n            paigutus2 = [[sg.Text('Lahutamine: ', text_color='white', font=('Helvetica', 15))],\r\n                  [sg.Text('Sisesta t\u00e4isarv 0-10: ', size=(17, 1)), sg.InputText()],\r\n                  [sg.Text('Sisesta arv 0-10: ', size=(17, 1)), sg.InputText()],\r\n                  [sg.Submit('LAHUTA!'), sg.Cancel('Sulge aken')]]\r\n        \r\n            #loome akna uue j\u00e4rjendiga\r\n            aken = sg.Window('Andmed 2', paigutus2, size=(300,200))\r\n        \r\n            syndmus2, v22rtused2 = aken.read()\r\n        \r\n            #kui aken pandi kinni, l\u00f5petab programm t\u00f6\u00f6\r\n            if syndmus2 == sg.WIN_CLOSED or syndmus2 == 'Sulge aken':\r\n            break\r\n        \r\n            #kui vajutatakse nuppu 'LAHUTA!', pannakse aken kinni ja avatakse uus\r\n            if syndmus2 == 'LAHUTA!':\r\n            \r\n              aken.close()\r\n            \r\n              #teisendame teisest aknast saadud sisendid arvudeks, et nendega saaks lahutustehet sooritada\r\n              sisend3 = int(v22rtused2[0])\r\n              sisend4 = int(v22rtused2[1])\r\n            \r\n              vahe = sisend3-sisend4\r\n            \r\n              #kuvame ekraanile sisendid ja arvutustehete vastused     mugaval kujul\r\n              sg.Popup('Tehete vastused: ',\r\n                 str(sisend1) + ' + ' + str(sisend2) + ' = ' + str(summa),\r\n                 str(sisend3) + ' - ' + str(sisend4) + ' = ' + str(vahe))\r\n        \r\naken.close()<\/pre>\n<p>Avanema peaksid j\u00e4rjest sellised aknad:<\/p>\n<ol>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-413\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-1-300x233.png\" alt=\"\" width=\"230\" height=\"179\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-1-300x233.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-1-65x51.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-1-225x175.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-1.png 302w\" sizes=\"auto, (max-width: 230px) 100vw, 230px\" \/><\/li>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-414\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-2.png\" alt=\"\" width=\"230\" height=\"188\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-2.png 298w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-2-65x53.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-2-225x184.png 225w\" sizes=\"auto, (max-width: 230px) 100vw, 230px\" \/><\/li>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-415\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-3-popup.png\" alt=\"\" width=\"173\" height=\"179\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-3-popup.png 188w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/uus-aken-3-popup-65x67.png 65w\" sizes=\"auto, (max-width: 173px) 100vw, 173px\" \/><\/li>\n<\/ol>\n<p>Seega selles peat\u00fckis \u00f5ppisid, kuidas integreerida erinevaid v\u00f5tteid ja elemente oma programmi &#8211; \u00f5ppisid looma h\u00fcpikakent, uut graafikaaknet, kasutama programmis funktsiooni ja ts\u00fckleid. \u00dchtlasi katsetasid, kuidas muuta programmi tegevust vastavalt sellele, mida graafikaaknasse sisestati.<\/p>\n","protected":false},"author":17,"menu_order":2,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-109","chapter","type-chapter","status-publish","hentry"],"part":102,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/109","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":8,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/109\/revisions"}],"predecessor-version":[{"id":761,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/109\/revisions\/761"}],"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\/109\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=109"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=109"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=109"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}