{"id":115,"date":"2020-11-03T09:31:55","date_gmt":"2020-11-03T09:31:55","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/?post_type=chapter&#038;p=115"},"modified":"2021-05-06T18:18:14","modified_gmt":"2021-05-06T18:18:14","slug":"pysimplegui-suurem-naide","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/pysimplegui-suurem-naide\/","title":{"raw":"PySimpleGUI suurem n\u00e4ide","rendered":"PySimpleGUI suurem n\u00e4ide"},"content":{"raw":"Suurema n\u00e4itena on digi\u00f5pikusse toodud programm, mis sisestatud andmete p\u00f5hjal loob tervituskaardi. See programm sisaldab k\u00f5iki seni\u00f5pitud teemasid, nii et \u00fclesande lahendamisel saad kinnistada oma teadmisi graafilise kasutajaliidese loomisest.\r\n\r\nAkende kujunduse, v\u00e4rviteema ja suuruse v\u00f5id ise valida!\r\n\r\nProgrammi k\u00e4ik on selline:\r\n<ol>\r\n \t<li>Esmalt k\u00fcsitakse tervitatava ees-ja perekonnanime. Aknas on ka tekstikast, kuhu saab kirjutada tervituse.<\/li>\r\n \t<li>J\u00e4rgmises aknas saab sisestada tervitatava s\u00fcnnikuup\u00e4eva. P\u00e4eva, kuu ja aasta valimiseks on kasutatud erinevaid viise - n\u00e4iteks liugurit, rippmen\u00fc\u00fcd v\u00f5i valikute kasti.\u00a0 Samuti saab failikataloogist valida \u00fche pildi, mille kaardile juurde panna. N\u00e4iteks v\u00f5iks see v\u00e4lja n\u00e4ha selline:\r\n<img class=\"alignnone wp-image-765\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/4_2.-aken-sunnipaev.png\" alt=\"\" width=\"544\" height=\"395\" \/><\/li>\r\n \t<li>Kolmandas aknas kuvataksegi tervituskaart - aknas kuvatakse k\u00f5iki andmeid ja tekste, mille kasutaja on sisestanud. Aknas on n\u00e4htaval ka pilt, mille kasutaja valis. Lisaks tuleb arvutada ja ekraanile kuvada ka tervitatava vanus (siin n\u00e4ites on kasutatud raskemat varianti - arvesse on v\u00f5etud ka s\u00fcnnikuud ja -kuup\u00e4eva. Arvutamiseks on loodud funktsioon).<\/li>\r\n \t<li>Viimasena avaneb h\u00fcpikaken, mis t\u00e4nab kasutajat programmi l\u00e4bimise eest.<\/li>\r\n<\/ol>\r\nSiin on ka n\u00e4idislahendus, aga p\u00fc\u00fca enne ise kirjeldusele vastav programm valmis teha!\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\nimport os\r\nfrom datetime import date\r\n\r\n#funktsioon hetkevanuse arvutamiseks\r\ndef arvuta_vanus(s\u00fcnnip\u00e4ev):\r\n    t\u00e4na = date.today()\r\n    vanus = t\u00e4na.year - s\u00fcnnip\u00e4ev.year - ((t\u00e4na.month, t\u00e4na.day) &lt; (s\u00fcnnip\u00e4ev.month, s\u00fcnnip\u00e4ev.day))\r\n    return vanus\r\n\r\nsg.theme('Purple')\r\n\r\npaigutus = [[sg.Text('Tervitusprogramm!', text_color='black', font=(\"Helvetica\", 12))],\r\n          [sg.Text('Sisesta s\u00fcnnip\u00e4evalapse eesnimi: ')],\r\n          [sg.InputText(key=\"eesnimi\")],\r\n          [sg.Text('Sisesta s\u00fcnnip\u00e4evalapse perekonnanimi: ')],\r\n          [sg.InputText(key=\"perekonnanimi\")],\r\n          [sg.Text('Sisesta tervitus: ')],\r\n          [sg.Multiline(key='tervitus')],\r\n          [sg.Text('_' * 80)],\r\n          [sg.Submit('J\u00e4rgmine'), sg.Cancel('V\u00e4lju')]]\r\naken = sg.Window('1. aken: nimi', paigutus, size=(600,400))\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()\r\n    #kui aken pannakse kinni, l\u00f5petab programm t\u00f6\u00f6\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n        break\r\n    #kui vajutatakse nuppu 'J\u00e4rgmine', pannakse p\u00f5hiaken kinni ja avaneb uus aken\r\n    if syndmus == 'J\u00e4rgmine':\r\n        aken.close()\r\n        \r\n        #salvestame ees- ja perekonnanime muutujatesse\r\n        eesnimi = v22rtused['eesnimi']\r\n        perekonnanimi = v22rtused['perekonnanimi']\r\n        \r\n        #salvestame tervituse muutujasse\r\n        tervitus = v22rtused['tervitus']\r\n        \r\n        #loome uue paigutuse uue akna jaoks\r\n        #kasutame erinevaid elemente\r\n        paigutus2 = [[sg.Text('Sisesta tervitatava s\u00fcnnip\u00e4ev, -kuu ja -aasta!', text_color='black', font=(\"Helvetica\", 12))],\r\n                  [sg.Text('P\u00e4ev: ', size=(10,1)), sg.Slider(range=(1,31), orientation='h', size=(50,25), key='p\u00e4ev')],\r\n                  [sg.Text('Kuu: ', size=(10,1)), sg.Listbox(values=('jaanuar', 'veebruar', 'm\u00e4rts', 'aprill', 'mai', 'juuni', 'juuli', 'august', 'september', 'oktoober', 'november', 'detsember'), key='kuu', size=(10, 6))],\r\n                  [sg.Text('Aasta: ', size=(10,1)), sg.InputCombo(('1995', '1996', '1997', '1998', '1999', '2000'), size=(5,10), key='aasta')],\r\n                  [sg.Text('_' * 80)],\r\n                  [sg.Text('Vali tervituspilt: '), sg.Input(size=(20,1)), sg.FileBrowse('Sirvi', key='sirvitud_fail')],\r\n                  [sg.Submit('Sisesta'), sg.Cancel('V\u00e4lju')]]\r\n   \r\n        aken = sg.Window('2. aken: s\u00fcnnip\u00e4ev', paigutus2, size=(600,400))\r\n        syndmus2, v22rtused2 = aken.read()\r\n        \r\n        #akna sulgemisel l\u00f5petab programm t\u00f6\u00f6\r\n        if syndmus2 == sg.WIN_CLOSED or syndmus2 == 'V\u00e4lju':\r\n            break\r\n        \r\n        #kui vajutatakse nuppu 'Sisesta', pannakse p\u00f5hiaken kinni ja avaneb uus aken\r\n        if syndmus2 == 'Sisesta':\r\n            aken.close()\r\n            \r\n            #salvestame s\u00fcnnikuup\u00e4eva detailid muutujatesse\r\n            p\u00e4ev = int(v22rtused2['p\u00e4ev'])\r\n            kuu = v22rtused2['kuu'][0]\r\n            aasta = int(v22rtused2['aasta'])\r\n            \r\n            #vastavalt kuule leiame selle kuu \"j\u00e4rjekorranumbri\", mida kasutame funktsioonis            \r\n            if kuu == 'jaanuar':\r\n                kuu2 = 1\r\n            if kuu == 'veebruar':\r\n                kuu2 = 2\r\n            if kuu == 'm\u00e4rts':\r\n                kuu2 = 3\r\n            if kuu == 'aprill':\r\n                kuu2 = 4\r\n            if kuu == 'mai':\r\n                kuu2 = 5\r\n            if kuu == 'juuni':\r\n                kuu2 = 6\r\n            if kuu == 'juuli':\r\n                kuu2 = 7\r\n            if kuu == 'august':\r\n                kuu2 = 8\r\n            if kuu == 'september':\r\n                kuu2 = 9\r\n            if kuu == 'oktoober':\r\n                kuu2 = 10\r\n            if kuu == 'november':\r\n                kuu2 = 11\r\n            if kuu == 'detsember':\r\n                kuu2 = 12\r\n            \r\n            #funktsioon arvutab hetkevanuse\r\n            #argumendiks m\u00e4\u00e4rame kuup\u00e4eva kujul (YY,MM,DD) s\u00fcnnip\u00e4eva\r\n            vanus = arvuta_vanus(date(aasta, kuu2, p\u00e4ev))\r\n            \r\n            #failipuust leiame vaid pildifaili nime\r\n            fail = v22rtused2['sirvitud_fail']\r\n            puu, failinimi = os.path.split(fail)\r\n            \r\n            #loome uue paigutuse viimase akna jaoks, kus kuvame kogu informatsiooni            \r\n            paigutus3 = [[sg.Text('Tere, ' + eesnimi + ' ' + perekonnanimi + '! (vanus: ' +  str(vanus) + ' aastat)')],\r\n                       [sg.Text('Sulle on saadetud tervitus: ')],\r\n                       [sg.Text(tervitus)],\r\n                       [sg.Image(failinimi)],\r\n                       [sg.Submit('V\u00e4lju')]]\r\n            \r\n            aken = sg.Window('3. aken: tervituskaart', paigutus3)\r\n            syndmus3, v22rtused3 = aken.read()\r\n            \r\n            #sulgemisel l\u00f5petab programm t\u00f6\u00f6\r\n            if syndmus3 == sg.WIN_CLOSED:\r\n                break\r\n            #nuppu vajutades sulgub p\u00f5hiaken ning avaneb h\u00fcpikaken\r\n            if syndmus3 == 'V\u00e4lju':\r\n                aken.close()             \r\n                sg.Popup('Ait\u00e4h!')\r\naken.close()<\/pre>\r\n&nbsp;","rendered":"<p>Suurema n\u00e4itena on digi\u00f5pikusse toodud programm, mis sisestatud andmete p\u00f5hjal loob tervituskaardi. See programm sisaldab k\u00f5iki seni\u00f5pitud teemasid, nii et \u00fclesande lahendamisel saad kinnistada oma teadmisi graafilise kasutajaliidese loomisest.<\/p>\n<p>Akende kujunduse, v\u00e4rviteema ja suuruse v\u00f5id ise valida!<\/p>\n<p>Programmi k\u00e4ik on selline:<\/p>\n<ol>\n<li>Esmalt k\u00fcsitakse tervitatava ees-ja perekonnanime. Aknas on ka tekstikast, kuhu saab kirjutada tervituse.<\/li>\n<li>J\u00e4rgmises aknas saab sisestada tervitatava s\u00fcnnikuup\u00e4eva. P\u00e4eva, kuu ja aasta valimiseks on kasutatud erinevaid viise &#8211; n\u00e4iteks liugurit, rippmen\u00fc\u00fcd v\u00f5i valikute kasti.\u00a0 Samuti saab failikataloogist valida \u00fche pildi, mille kaardile juurde panna. N\u00e4iteks v\u00f5iks see v\u00e4lja n\u00e4ha selline:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-765\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/4_2.-aken-sunnipaev.png\" alt=\"\" width=\"544\" height=\"395\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/4_2.-aken-sunnipaev.png 600w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/4_2.-aken-sunnipaev-300x218.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/4_2.-aken-sunnipaev-65x47.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/4_2.-aken-sunnipaev-225x164.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/11\/4_2.-aken-sunnipaev-350x254.png 350w\" sizes=\"auto, (max-width: 544px) 100vw, 544px\" \/><\/li>\n<li>Kolmandas aknas kuvataksegi tervituskaart &#8211; aknas kuvatakse k\u00f5iki andmeid ja tekste, mille kasutaja on sisestanud. Aknas on n\u00e4htaval ka pilt, mille kasutaja valis. Lisaks tuleb arvutada ja ekraanile kuvada ka tervitatava vanus (siin n\u00e4ites on kasutatud raskemat varianti &#8211; arvesse on v\u00f5etud ka s\u00fcnnikuud ja -kuup\u00e4eva. Arvutamiseks on loodud funktsioon).<\/li>\n<li>Viimasena avaneb h\u00fcpikaken, mis t\u00e4nab kasutajat programmi l\u00e4bimise eest.<\/li>\n<\/ol>\n<p>Siin on ka n\u00e4idislahendus, aga p\u00fc\u00fca enne ise kirjeldusele vastav programm valmis teha!<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import PySimpleGUI as sg\r\nimport os\r\nfrom datetime import date\r\n\r\n#funktsioon hetkevanuse arvutamiseks\r\ndef arvuta_vanus(s\u00fcnnip\u00e4ev):\r\n    t\u00e4na = date.today()\r\n    vanus = t\u00e4na.year - s\u00fcnnip\u00e4ev.year - ((t\u00e4na.month, t\u00e4na.day) &lt; (s\u00fcnnip\u00e4ev.month, s\u00fcnnip\u00e4ev.day))\r\n    return vanus\r\n\r\nsg.theme('Purple')\r\n\r\npaigutus = [[sg.Text('Tervitusprogramm!', text_color='black', font=(\"Helvetica\", 12))],\r\n          [sg.Text('Sisesta s\u00fcnnip\u00e4evalapse eesnimi: ')],\r\n          [sg.InputText(key=\"eesnimi\")],\r\n          [sg.Text('Sisesta s\u00fcnnip\u00e4evalapse perekonnanimi: ')],\r\n          [sg.InputText(key=\"perekonnanimi\")],\r\n          [sg.Text('Sisesta tervitus: ')],\r\n          [sg.Multiline(key='tervitus')],\r\n          [sg.Text('_' * 80)],\r\n          [sg.Submit('J\u00e4rgmine'), sg.Cancel('V\u00e4lju')]]\r\naken = sg.Window('1. aken: nimi', paigutus, size=(600,400))\r\n\r\nwhile True:\r\n    syndmus, v22rtused = aken.read()\r\n    #kui aken pannakse kinni, l\u00f5petab programm t\u00f6\u00f6\r\n    if syndmus == sg.WIN_CLOSED or syndmus == 'Sulge aken':\r\n        break\r\n    #kui vajutatakse nuppu 'J\u00e4rgmine', pannakse p\u00f5hiaken kinni ja avaneb uus aken\r\n    if syndmus == 'J\u00e4rgmine':\r\n        aken.close()\r\n        \r\n        #salvestame ees- ja perekonnanime muutujatesse\r\n        eesnimi = v22rtused['eesnimi']\r\n        perekonnanimi = v22rtused['perekonnanimi']\r\n        \r\n        #salvestame tervituse muutujasse\r\n        tervitus = v22rtused['tervitus']\r\n        \r\n        #loome uue paigutuse uue akna jaoks\r\n        #kasutame erinevaid elemente\r\n        paigutus2 = [[sg.Text('Sisesta tervitatava s\u00fcnnip\u00e4ev, -kuu ja -aasta!', text_color='black', font=(\"Helvetica\", 12))],\r\n                  [sg.Text('P\u00e4ev: ', size=(10,1)), sg.Slider(range=(1,31), orientation='h', size=(50,25), key='p\u00e4ev')],\r\n                  [sg.Text('Kuu: ', size=(10,1)), sg.Listbox(values=('jaanuar', 'veebruar', 'm\u00e4rts', 'aprill', 'mai', 'juuni', 'juuli', 'august', 'september', 'oktoober', 'november', 'detsember'), key='kuu', size=(10, 6))],\r\n                  [sg.Text('Aasta: ', size=(10,1)), sg.InputCombo(('1995', '1996', '1997', '1998', '1999', '2000'), size=(5,10), key='aasta')],\r\n                  [sg.Text('_' * 80)],\r\n                  [sg.Text('Vali tervituspilt: '), sg.Input(size=(20,1)), sg.FileBrowse('Sirvi', key='sirvitud_fail')],\r\n                  [sg.Submit('Sisesta'), sg.Cancel('V\u00e4lju')]]\r\n   \r\n        aken = sg.Window('2. aken: s\u00fcnnip\u00e4ev', paigutus2, size=(600,400))\r\n        syndmus2, v22rtused2 = aken.read()\r\n        \r\n        #akna sulgemisel l\u00f5petab programm t\u00f6\u00f6\r\n        if syndmus2 == sg.WIN_CLOSED or syndmus2 == 'V\u00e4lju':\r\n            break\r\n        \r\n        #kui vajutatakse nuppu 'Sisesta', pannakse p\u00f5hiaken kinni ja avaneb uus aken\r\n        if syndmus2 == 'Sisesta':\r\n            aken.close()\r\n            \r\n            #salvestame s\u00fcnnikuup\u00e4eva detailid muutujatesse\r\n            p\u00e4ev = int(v22rtused2['p\u00e4ev'])\r\n            kuu = v22rtused2['kuu'][0]\r\n            aasta = int(v22rtused2['aasta'])\r\n            \r\n            #vastavalt kuule leiame selle kuu \"j\u00e4rjekorranumbri\", mida kasutame funktsioonis            \r\n            if kuu == 'jaanuar':\r\n                kuu2 = 1\r\n            if kuu == 'veebruar':\r\n                kuu2 = 2\r\n            if kuu == 'm\u00e4rts':\r\n                kuu2 = 3\r\n            if kuu == 'aprill':\r\n                kuu2 = 4\r\n            if kuu == 'mai':\r\n                kuu2 = 5\r\n            if kuu == 'juuni':\r\n                kuu2 = 6\r\n            if kuu == 'juuli':\r\n                kuu2 = 7\r\n            if kuu == 'august':\r\n                kuu2 = 8\r\n            if kuu == 'september':\r\n                kuu2 = 9\r\n            if kuu == 'oktoober':\r\n                kuu2 = 10\r\n            if kuu == 'november':\r\n                kuu2 = 11\r\n            if kuu == 'detsember':\r\n                kuu2 = 12\r\n            \r\n            #funktsioon arvutab hetkevanuse\r\n            #argumendiks m\u00e4\u00e4rame kuup\u00e4eva kujul (YY,MM,DD) s\u00fcnnip\u00e4eva\r\n            vanus = arvuta_vanus(date(aasta, kuu2, p\u00e4ev))\r\n            \r\n            #failipuust leiame vaid pildifaili nime\r\n            fail = v22rtused2['sirvitud_fail']\r\n            puu, failinimi = os.path.split(fail)\r\n            \r\n            #loome uue paigutuse viimase akna jaoks, kus kuvame kogu informatsiooni            \r\n            paigutus3 = [[sg.Text('Tere, ' + eesnimi + ' ' + perekonnanimi + '! (vanus: ' +  str(vanus) + ' aastat)')],\r\n                       [sg.Text('Sulle on saadetud tervitus: ')],\r\n                       [sg.Text(tervitus)],\r\n                       [sg.Image(failinimi)],\r\n                       [sg.Submit('V\u00e4lju')]]\r\n            \r\n            aken = sg.Window('3. aken: tervituskaart', paigutus3)\r\n            syndmus3, v22rtused3 = aken.read()\r\n            \r\n            #sulgemisel l\u00f5petab programm t\u00f6\u00f6\r\n            if syndmus3 == sg.WIN_CLOSED:\r\n                break\r\n            #nuppu vajutades sulgub p\u00f5hiaken ning avaneb h\u00fcpikaken\r\n            if syndmus3 == 'V\u00e4lju':\r\n                aken.close()             \r\n                sg.Popup('Ait\u00e4h!')\r\naken.close()<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"author":17,"menu_order":4,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-115","chapter","type-chapter","status-publish","hentry"],"part":102,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/115","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":5,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/115\/revisions"}],"predecessor-version":[{"id":432,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/115\/revisions\/432"}],"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\/115\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=115"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=115"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=115"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}