{"id":12168,"date":"2023-01-14T11:52:28","date_gmt":"2023-01-14T10:52:28","guid":{"rendered":"https:\/\/www.picademie.nl\/?p=12168"},"modified":"2025-01-06T14:22:25","modified_gmt":"2025-01-06T13:22:25","slug":"fullscreen-aftellen-datum-tijd","status":"publish","type":"post","link":"https:\/\/www.picademie.nl\/index.php\/2023\/01\/14\/fullscreen-aftellen-datum-tijd\/","title":{"rendered":"Fullscreen &#8211; Aftellen datum\/tijd"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">Als je het millennium moment, de overgang naar het jaar 2000, hebt meegemaakt weet je nog wel dat er overal aftelklokken te krijgen waren. Helaas werken die meeste klokken niet meer omdat ze aftelden naar het '1-1-2000'-moment. Wat was het spannend om naar het nieuwe millennium te gaan. De computersystemen zouden last hebben van de 'millenniumbug' omdat de computerklok het jaar 2000 niet zou herkennen. In veel gevallen was het loos alarm. Zo'n aftelklok kun je ook gebruiken voor andere momenten, zoals de verjaardag van je oma, je vakantie of misschien wel je pensioen.    <\/pre>\n\n\n\n<p>In deze tutorial laat ik ziet hoe je een schermvullende aftelklok maakt in Tkinter. Het moment waarnaar afgeteld wordt stel je zelf in. Je kunt het lettertype, de grootte en de kleur van de tekst naar keuze instellen. Als voorbeeld telt het script af naar het jaar<strong> 2030<\/strong>, het moment dat er geen nieuwe brandstof auto&#8217;s geproduceerd mogen worden.<\/p>\n\n\n\n<p><strong>We hebben Tkinter nodig!<\/strong><\/p>\n\n\n\n<p>Om de grafische output op een volledig scherm te tonen is <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Tkinter <\/mark>nodig. Deze bevindt zich standaard in de laatste versie van het Raspberry Pi OS. Je kunt dit controleren door in de desktop naar&nbsp;<strong>Voorkeuren<\/strong>&nbsp;te gaan en vervolgens naar&nbsp;<strong>Add \/ Remove Software<\/strong>. Type hier vervolgens &#8216;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Tkinter<\/mark>&#8216; in. Als het goed is zie je een vinkje bij Tkinter staan.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"605\" height=\"362\" src=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2023\/01\/add.jpg\" alt=\"\" class=\"wp-image-12113\" srcset=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2023\/01\/add.jpg 605w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2023\/01\/add-300x180.jpg 300w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><\/figure>\n\n\n\n<p>Heb je een andere versie van het OS of zie je Tkinter er niet bij staan om aan te vinken, installeer dan Tkinter vanaf de prompt in de terminal met:<\/p>\n\n\n\n<p><kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">sudo apt-get install python-tk python3-tk<\/mark><\/kbd><\/p>\n\n\n\n<p>Om te zien of Tkinter goed ge\u00efnstalleerd is, gebruik je in Python het twee-regel script:<\/p>\n\n\n\n<p><kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">import tkinter<\/mark><\/kbd><\/p>\n\n\n\n<p><kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">tkinter._test()<\/mark><\/kbd><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Als het goed ge\u00efnstalleerd is, zie je in de desktop van de Pi een venster verschijnen zoals hieronder.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"232\" height=\"118\" src=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2021\/07\/image-37.png\" alt=\"\" class=\"wp-image-5688\"\/><figcaption class=\"wp-element-caption\">Tkinter test<\/figcaption><\/figure>\n\n\n\n<p><strong>Laatste updates<\/strong><br>Ik ga ervan uit dat je Raspberry Pi \u2018schoon\u2019 is en dat de pakketten van de laatste updates en upgrades voorzien zijn. Zo niet, voer dan de volgende opdrachten in de terminal in.<\/p>\n\n\n\n<p><kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">sudo apt-get update<\/mark><\/kbd><\/p>\n\n\n\n<p><kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">sudo apt-get upgrade<\/mark><\/kbd><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aan de slag!<\/h2>\n\n\n\n<p><strong>Stap 1.&nbsp;Bibliotheken importeren en variabelen initialiseren<\/strong><\/p>\n\n\n\n<p>Om een \u200b\u200bcountdown<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\"> timer in Python te maken importeren we eerst de specifieke onderdelen van het Tkinter-pakket.&nbsp;Om system-specifieke parameters en functies te kunnen gebruiken importeren we&nbsp;de time- en de datumtijd<\/mark>module om een \u200b\u200bdatum en tijd te verkrijgen.&nbsp;De eindtijd declareren we als globaal.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">from tkinter import *\nfrom tkinter import ttk\nfrom tkinter import font\nimport time\nimport datetime<\/mark>\n\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">global endTime<\/mark><\/code><\/pre>\n\n\n\n<p><strong>Stap 2: Functie voor het stoppen van het Tkinter scherm<\/strong><\/p>\n\n\n\n<p>Om de Tkinter uitvoering te stoppen gebruiken we de<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\"> destroy()-<\/mark>methode.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">def quit(*args):\n    root.destroy()<\/mark>\n<\/code><\/pre>\n\n\n\n<p><strong>Stap 3: Functie voor de resterende tijd vaststellen <\/strong><\/p>\n\n\n\n<p>Hier wordt de overgebleven tijd gedefinieerd en getoond, de onrustige microsseconden verwijderd en een vertraging van 1 seconde ingebouwd voor het tonen van het aftellen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">def show_time():\n    remainder = endTime - datetime.datetime.now()\n    remainder = remainder - datetime.timedelta(microseconds=remainder.microseconds)\n    txt.set(remainder)\n    root.after(1000, show_time)<\/mark>\n<\/code><\/pre>\n\n\n\n<p><strong>Stap 4: Tkinter opbouw<\/strong><\/p>\n\n\n\n<p>We gebruiken Tkinter om de klok fullscreen te tonen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">root = Tk()\nroot.attributes(\"-fullscreen\", True)\nroot.configure(background='black')\nroot.bind(\"c\", quit)  <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># Om het aftellen te stoppen (Control-c)<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">\nroot.after(1000, show_time)<\/mark>\n<\/code><\/pre>\n\n\n\n<p><strong>Stap 5: Eindtijd instellen<\/strong><\/p>\n\n\n\n<p>De einddatum en tijd worden ingesteld. In dit voorbeeld is dit 1-1-2030 om 00:00:00 uur.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">endTime = datetime.datetime(2030, 1, 1, 0, 0, 0)<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"> # Jaar,Maand,Dag,Uur,Min,Sec\n<\/mark><\/code><\/pre>\n\n\n\n<p><strong>Stap 6: Tekstopmaak<\/strong><\/p>\n\n\n\n<p>Binnen de Tkinter instellingen stel we het lettertype vast, de achtergrond- en letterkleur en de positie van de tekst.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">fnt = font.Font(family='Helvetica', size=60, weight='bold') \ntxt = StringVar()\nlbl = ttk.Label(root, textvariable=txt, font=fnt, foreground=\"#3366FF\", background=\"black\") \nlbl.place(relx=0.5, rely=0.5, anchor=CENTER)<\/mark>\n<\/code><\/pre>\n\n\n\n<p><strong>Stap 7: De Tkinter mainloop <\/strong><\/p>\n\n\n\n<p>De root.mainloop() is een vast onderdeel van de Tkinter methode die we in het hoofdvenster moeten uitvoeren wanneer we onze applicatie willen kunnen starten. Deze methode loopt voor altijd door, wachtend op gebeurtenissen van de gebruiker, totdat de gebruiker het programma verlaat &#8211; hetzij door het venster te sluiten, hetzij door het programma te be\u00ebindigen met een toetsenbordonderbreking in de console.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">root.mainloop()<\/mark>\n<\/code><\/pre>\n\n\n\n<p><strong>Download script<\/strong><\/p>\n\n\n\n<p>Download hieronder het script. <\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-dc6fa8ae-9ec5-40cc-b033-b7bfe7a2ac8b\" href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2023\/01\/momentAftellen.zip\">Download hier het gezipte script momentAftellen.py<\/a><a href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2023\/01\/momentAftellen.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-dc6fa8ae-9ec5-40cc-b033-b7bfe7a2ac8b\"><\/a><\/div>\n\n\n\n<p><strong>Stap 9. Script opstarten<\/strong><\/p>\n\n\n\n<p>Omdat we gebruik maken van Tkinter heb je het grafische scherm van de Raspberry Pi nodig. Daarom start je het bestand in de terminal van de Raspberry Pi op, dus&nbsp;<strong>niet&nbsp;<\/strong>via SSH, met VNC lukt dit wel!<\/p>\n\n\n\n<p>Wil je weten hoe je VNC installeert? Kijk dan&nbsp;<a href=\"https:\/\/www.picademie.nl\/index.php\/2020\/12\/19\/vnc-verbinding-tussen-de-raspberry-pi-en-een-windows-pc\/\">hier<\/a>.<\/p>\n\n\n\n<p>Het script wordt opgestart met de opdracht:<\/p>\n\n\n\n<p><kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">python momentAftellen.py<\/mark><\/kbd><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Raspberry Pi - Countdown (datum\/tijd)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/lrbFtSQHLjY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Mocht je nog vragen en\/of opmerkingen hebben, laat het dan hieronder weten.<\/p>\n\n\n\n<p><em>Have A Nice Day!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Als je het millennium moment, de overgang naar het jaar 2000, hebt meegemaakt weet je nog wel dat er overal aftelklokken te krijgen waren. Helaas <a class=\"mh-excerpt-more\" href=\"https:\/\/www.picademie.nl\/index.php\/2023\/01\/14\/fullscreen-aftellen-datum-tijd\/\" title=\"Fullscreen &#8211; Aftellen datum\/tijd\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":12213,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[730],"tags":[645,646,628,633,631,644,256,629,630,632,70],"class_list":["post-12168","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tooling","tag-aftelklok","tag-aftellen","tag-escaperoom","tag-full","tag-fullscreen","tag-millennium","tag-screen","tag-stopwatch","tag-time","tag-timer","tag-tkinter"],"jetpack_featured_media_url":"https:\/\/www.picademie.nl\/wp-content\/uploads\/2023\/01\/countdown2.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/12168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/comments?post=12168"}],"version-history":[{"count":0,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/12168\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media\/12213"}],"wp:attachment":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media?parent=12168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/categories?post=12168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/tags?post=12168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}