<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>display &amp;mdash; Paul Sutton</title>
    <link>https://personaljournal.ca/paulsutton/tag:display</link>
    <description>Personal Blog</description>
    <pubDate>Tue, 05 May 2026 13:05:42 +0000</pubDate>
    <item>
      <title>STEAM Cafe 3</title>
      <link>https://personaljournal.ca/paulsutton/steam-cafe-3</link>
      <description>&lt;![CDATA[STEAM Cafe 3&#xA;&#xA;The discovery centre in Paignton is now open,   located at the back of the café, it has a range of interactive displays and activities centred around STEAM (Science, Technology, Engineering, Arts and Mathematics)&#xA;&#xA;STEAM Activities 1&#xA;&#xA;STEAM Activities 2&#xA;&#xA;Engineering wall,  this is a great activity you can attach different components to the wall and experiment with what happens when you turn one component and how ths interacts with other components.  What happens when you connect 2 or more cogs of the same size,  what happens if they are different sizes etc?&#xA;&#xA;Contact :  Facebook Steam Cafe&#xA;13 Torbay Road, Paignton&#xA;&#xA;Tags&#xA;&#xA;#SteamCafe,#DiscoveryCentre,#Activities,#Display,#STEAM&#xA;&#xA;   &#xA;&#xA; &#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>STEAM Cafe 3</p>

<p>The discovery centre in Paignton is now open,   located at the back of the café, it has a range of interactive displays and activities centred around STEAM (Science, Technology, Engineering, Arts and Mathematics)</p>

<p><img src="https://salsa.debian.org/zleap-guest/blog-media/-/raw/master/steamcafe116.JPG" alt="STEAM Activities 1"></p>

<p><img src="https://salsa.debian.org/zleap-guest/blog-media/-/raw/master/steamcafe117.JPG" alt="STEAM Activities 2"></p>

<p>Engineering wall,  this is a great activity you can attach different components to the wall and experiment with what happens when you turn one component and how ths interacts with other components.  What happens when you connect 2 or more cogs of the same size,  what happens if they are different sizes etc?</p>

<p>Contact :  <a href="https://www.facebook.com/people/STEAM-Paignton/61564393025280/" rel="nofollow">Facebook Steam Cafe</a>
13 Torbay Road, Paignton</p>

<p><strong>Tags</strong></p>

<p><a href="/paulsutton/tag:SteamCafe" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">SteamCafe</span></a>,<a href="/paulsutton/tag:DiscoveryCentre" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">DiscoveryCentre</span></a>,<a href="/paulsutton/tag:Activities" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Activities</span></a>,<a href="/paulsutton/tag:Display" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Display</span></a>,<a href="/paulsutton/tag:STEAM" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">STEAM</span></a></p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/steam-cafe-3</guid>
      <pubDate>Sat, 01 Mar 2025 07:00:00 +0000</pubDate>
    </item>
    <item>
      <title>STEAM Cafe 2</title>
      <link>https://personaljournal.ca/paulsutton/steam-cafe-2</link>
      <description>&lt;![CDATA[STEAM Cafe 2&#xA;&#xA;A few more photos from the STEAM (Science, Technology, Engineering, Arts and Mathematics) discovery centre in Paignton,&#xA;&#xA;STEAM Activities 1&#xA;&#xA;Lego table&#xA;&#xA;STEAM Activities 2&#xA;&#xA;Craft &amp; Activity table&#xA;&#xA;Contact :  Facebook Steam Cafe&#xA;13 Torbay Road, Paignton&#xA;&#xA;Tags&#xA;&#xA;#SteamCafe,#DiscoveryCentre,#Activities,#Display,#STEAM&#xA;&#xA;   &#xA;&#xA; &#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>STEAM Cafe 2</p>

<p>A few more photos from the STEAM (Science, Technology, Engineering, Arts and Mathematics) discovery centre in Paignton,</p>

<p><img src="https://salsa.debian.org/zleap-guest/blog-media/-/raw/master/steamcafe118.JPG" alt="STEAM Activities 1"></p>

<p><em>Lego table</em></p>

<p><img src="https://salsa.debian.org/zleap-guest/blog-media/-/raw/master/steamcafe119.JPG" alt="STEAM Activities 2"></p>

<p><em>Craft &amp; Activity table</em></p>

<p>Contact :  <a href="https://www.facebook.com/people/STEAM-Paignton/61564393025280/" rel="nofollow">Facebook Steam Cafe</a>
13 Torbay Road, Paignton</p>

<p><strong>Tags</strong></p>

<p><a href="/paulsutton/tag:SteamCafe" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">SteamCafe</span></a>,<a href="/paulsutton/tag:DiscoveryCentre" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">DiscoveryCentre</span></a>,<a href="/paulsutton/tag:Activities" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Activities</span></a>,<a href="/paulsutton/tag:Display" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Display</span></a>,<a href="/paulsutton/tag:STEAM" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">STEAM</span></a></p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/steam-cafe-2</guid>
      <pubDate>Fri, 28 Feb 2025 07:00:00 +0000</pubDate>
    </item>
    <item>
      <title>STEAM Cafe 1</title>
      <link>https://personaljournal.ca/paulsutton/steam-cafe-1</link>
      <description>&lt;![CDATA[STEAM Cafe 1&#xA;&#xA;The discovery centre in Paignton is now open,   located at the back of the cafe, it has a range of interactive displays and activities centred around STEAM (Science, Technology, Engineering, Arts and Mathematics)&#xA;&#xA;STEAM Activities 1&#xA;&#xA;STEAM Activities 2&#xA;&#xA;Contact :  Facebook Steam Cafe&#xA;13 Torbay Road, Paignton&#xA;&#xA;Tags&#xA;&#xA;#SteamCafe,#DiscoveryCentre,#Activities,#Display,#STEAM&#xA;&#xA;   &#xA;&#xA; &#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>STEAM Cafe 1</p>

<p>The discovery centre in Paignton is now open,   located at the back of the cafe, it has a range of interactive displays and activities centred around STEAM (Science, Technology, Engineering, Arts and Mathematics)</p>

<p><img src="https://salsa.debian.org/zleap-guest/blog-media/-/raw/master/steamcafe123.JPG" alt="STEAM Activities 1"></p>

<p><img src="https://salsa.debian.org/zleap-guest/blog-media/-/raw/master/steamcafe124.JPG" alt="STEAM Activities 2"></p>

<p>Contact :  <a href="https://www.facebook.com/people/STEAM-Paignton/61564393025280/" rel="nofollow">Facebook Steam Cafe</a>
13 Torbay Road, Paignton</p>

<p><strong>Tags</strong></p>

<p><a href="/paulsutton/tag:SteamCafe" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">SteamCafe</span></a>,<a href="/paulsutton/tag:DiscoveryCentre" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">DiscoveryCentre</span></a>,<a href="/paulsutton/tag:Activities" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Activities</span></a>,<a href="/paulsutton/tag:Display" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Display</span></a>,<a href="/paulsutton/tag:STEAM" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">STEAM</span></a></p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/steam-cafe-1</guid>
      <pubDate>Thu, 27 Feb 2025 07:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Bash scripting 11 - ExifTool menu</title>
      <link>https://personaljournal.ca/paulsutton/bash-scripting-11-exiftool-menu</link>
      <description>&lt;![CDATA[Bash scripting 11 - ExifTool menu&#xA;&#xA;I have created a very rough and basic script to :-&#xA;&#xA;Display a directory listing (currently this will display only .png and .JPG files.&#xA;As for a filename&#xA;Display a menu, so that users can choose which Meta data information to display.&#xA;&#xA;https://www.baeldung.com/linux/shell-script-simple-select-menu&#xA;!/bin/bash&#xA;clear # clear display - lets keep things tidy&#xA;ls .png .JPG #display directory listing png files&#xA;echo&#xA;echo &#34;Please enter a filename&#34;&#xA;echo&#xA;read filename&#xA;echo &#34;File: &#34; $filename&#xA;echo&#xA;echo &#34;Menu&#34;&#xA;echo&#xA;PS3=&#34;Select your Option: &#34;&#xA;&#xA;while true; do&#xA;    select lng in All ImageSize FileSize PixelSize ClearScreen Quit&#xA;    do&#xA;        case $lng in&#xA;            &#xA;            &#34;All&#34;)&#xA;                exiftool $filename; break;;&#xA;            &#34;ImageSize&#34;)&#xA;               exiftool -s -ImageSize $filename; break;;&#xA;            &#34;FileSize&#34;)&#xA;              exiftool -s -FileSize $filename;break;;&#xA;            &#34;PixelSize&#34;)&#xA;                exiftool -s -Megapixels $filename;break;;&#xA;            &#34;ClearScreen&#34;)&#xA;                clear;break;;&#xA;            &#34;Quit&#34;)&#xA;               echo &#34;We&#39;re done&#34;; break 2;;&#xA;            *)&#xA;               echo &#34;Ooops&#34;; break ;;&#xA;        esac&#xA;    done&#xA;done&#xA;&#xA;It is a little rough around the edges, but it works, and there is, of course, room for improvement.&#xA;&#xA;Tags&#xA;&#xA;#Bash,#Bashscripting,#ExifToolMenu,#MetaData&#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Bash scripting 11 – ExifTool menu</p>

<p>I have created a very rough and basic script to :-</p>
<ul><li>Display a directory listing (currently this will display only .png and .JPG files.</li>
<li>As for a filename</li>
<li>Display a menu, so that users can choose which Meta data information to display.</li></ul>

<pre><code class="language-bash"># https://www.baeldung.com/linux/shell-script-simple-select-menu
#!/bin/bash
clear # clear display - lets keep things tidy
ls *.png *.JPG #display directory listing png files
echo
echo &#34;Please enter a filename&#34;
echo
read filename
echo &#34;File: &#34; $filename
echo
echo &#34;Menu&#34;
echo
PS3=&#34;Select your Option: &#34;

while true; do
    select lng in All ImageSize FileSize PixelSize ClearScreen Quit
    do
        case $lng in
            
            &#34;All&#34;)
                exiftool $filename; break;;
            &#34;ImageSize&#34;)
               exiftool -s -ImageSize $filename; break;;
            &#34;FileSize&#34;)
              exiftool -s -FileSize $filename;break;;
            &#34;PixelSize&#34;)
                exiftool -s -Megapixels $filename;break;;
            &#34;ClearScreen&#34;)
                clear;break;;
            &#34;Quit&#34;)
               echo &#34;We&#39;re done&#34;; break 2;;
            *)
               echo &#34;Ooops&#34;; break ;;
        esac
    done
done
</code></pre>

<p>It is a little rough around the edges, but it works, and there is, of course, room for improvement.</p>

<p><strong>Tags</strong></p>

<p><a href="/paulsutton/tag:Bash" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Bash</span></a>,<a href="/paulsutton/tag:Bashscripting" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Bashscripting</span></a>,<a href="/paulsutton/tag:ExifToolMenu" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">ExifToolMenu</span></a>,<a href="/paulsutton/tag:MetaData" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">MetaData</span></a></p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/bash-scripting-11-exiftool-menu</guid>
      <pubDate>Sat, 08 Feb 2025 22:46:35 +0000</pubDate>
    </item>
    <item>
      <title>Galculator</title>
      <link>https://personaljournal.ca/paulsutton/galculator</link>
      <description>&lt;![CDATA[Galculator&#xA;&#xA;Galculator is a calculator app available in Debian.  Debian 10 comes with version 2.1.4.&#xA;&#xA;I seem to have found an odd bug in the software, so am documenting here to see if others can reproduce.&#xA;&#xA;The display should be able to handle numbers bigger than 999.  However it seems that is not the case if you use a separator (,) in between big numbers (which is designed to make it easier to read)&#xA;&#xA;Consider&#xA;1,000,000 vs 1000000&#xA;&#xA;Galculator&#xA;&#xA;This shows the software working as expected.&#xA;&#xA;Setting Separator&#xA;&#xA;After setting a comma ( , ) as a Separator and entering a long number, we get a problem with the display.&#xA;&#xA;Display bug &#xA;&#xA;According to the Debian tracker bullseye will have  2.1.4-1.1.&#xA;&#xA;I am not sure if this happens in Debian 11,  but I am just reporting this here, I can take a video later on, but that will just illustrate the same as above.&#xA;&#xA;I would guess this can be reported to the Bug Tracking System if it can be reproduced.&#xA;&#xA;My system here is:-&#xA;&#xA;Client: HexChat 2.14.2 • OS: Debian 10.9 • CPU: Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz (1.60GHz) • Memory: Physical: 2.8 GiB Total (1.5 GiB Free) Swap: 2.9 GiB Total (2.9 GiB Free) • Storage: 546.4 GB / 647.2 GB (100.9 GB Free) • VGA: Intel Corporation 82Q35 Express Integrated Graphics Controller @ Intel Corporation 82Q35 Express DRAM Controller • Uptime: 5h 56m 1s&#xA;&#xA;Running LXDE Desktop&#xA;&#xA;#Debian,#Buster,#Galculator,#Bug,#Display&#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Galculator</p>

<p>Galculator is a calculator app available in Debian.  Debian 10 comes with version 2.1.4.</p>

<p>I seem to have found an odd bug in the software, so am documenting here to see if others can reproduce.</p>

<p>The display should be able to handle numbers bigger than 999.  However it seems that is not the case if you use a separator (,) in between big numbers (which is designed to make it easier to read)</p>

<p>Consider
1,000,000 vs 1000000</p>

<p><img src="https://salsa.debian.org/zleap-guest/screenshots/-/raw/master/Galculator214/galculator.png" alt="Galculator"></p>

<p>This shows the software working as expected.</p>

<p><img src="https://salsa.debian.org/zleap-guest/screenshots/-/raw/master/Galculator214/separator.png" alt="Setting Separator"></p>

<p>After setting a comma ( , ) as a Separator and entering a long number, we get a problem with the display.</p>

<p><img src="https://salsa.debian.org/zleap-guest/screenshots/-/raw/master/Galculator214/display-bug.png" alt="Display bug"></p>

<p>According to the <a href="https://tracker.debian.org/pkg/galculator" rel="nofollow">Debian tracker</a> bullseye will have  2.1.4-1.1.</p>

<p>I am not sure if this happens in Debian 11,  but I am just reporting this here, I can take a video later on, but that will just illustrate the same as above.</p>

<p>I would guess this can be reported to the <a href="https://www.debian.org/Bugs/" rel="nofollow">Bug Tracking System</a> if it can be reproduced.</p>

<p>My system here is:-</p>

<pre><code>Client: HexChat 2.14.2 • OS: Debian 10.9 • CPU: Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz (1.60GHz) • Memory: Physical: 2.8 GiB Total (1.5 GiB Free) Swap: 2.9 GiB Total (2.9 GiB Free) • Storage: 546.4 GB / 647.2 GB (100.9 GB Free) • VGA: Intel Corporation 82Q35 Express Integrated Graphics Controller @ Intel Corporation 82Q35 Express DRAM Controller • Uptime: 5h 56m 1s

Running LXDE Desktop
</code></pre>

<p><a href="/paulsutton/tag:Debian" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Debian</span></a>,<a href="/paulsutton/tag:Buster" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Buster</span></a>,<a href="/paulsutton/tag:Galculator" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Galculator</span></a>,<a href="/paulsutton/tag:Bug" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Bug</span></a>,<a href="/paulsutton/tag:Display" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">Display</span></a></p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/galculator</guid>
      <pubDate>Tue, 18 May 2021 20:51:03 +0000</pubDate>
    </item>
    <item>
      <title>Liberoffice 7 Impress - Text formatting tool bar</title>
      <link>https://personaljournal.ca/paulsutton/liberoffice-7-impress-text-formatting-tool-bar</link>
      <description>&lt;![CDATA[Liberoffice 7 Impress - Text formatting tool bar&#xA;&#xA;By default libreoffice 7 impress does not display tools for text formatting on the toolbar.&#xA;&#xA;Text Formatting Tools&#xA;&#xA;To fix this, you need to &#xA;&#xA;Click View --  Tool bars --  Text Formatting&#xA; &#xA;And the tool will be displayed&#xA;&#xA;View tool bars menu&#xA;&#xA;Video below illustrates process &#xA;&#xA;iframe width=&#34;560&#34; height=&#34;315&#34; sandbox=&#34;allow-same-origin allow-scripts allow-popups&#34; src=&#34;https://diode.zone/videos/embed/115365ca-04db-4f0f-8ada-c6b080c3d38e&#34; frameborder=&#34;0&#34; allowfullscreen/iframe&#xA;&#xA;#libreoffice7,#impress,#display,#text,#formatting,toolbar,&#xA;#help,#support.&#xA;&#xA;a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-sa/4.0/&#34;img alt=&#34;Creative Commons Licence&#34; style=&#34;border-width:0&#34; src=&#34;https://i.creativecommons.org/l/by-sa/4.0/88x31.png&#34; //abr /This work is licensed under a a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-sa/4.0/&#34;Creative Commons Attribution-ShareAlike 4.0 International License/a&#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Liberoffice 7 Impress – Text formatting tool bar</p>

<p>By default libreoffice 7 impress does not display tools for text formatting on the toolbar.</p>

<p><img src="https://salsa.debian.org/zleap-guest/screenshots/-/raw/master/libreoffice7/impress/text-formatting.png" alt="Text Formatting Tools"></p>

<p>To fix this, you need to</p>

<p>Click <strong>View</strong> —&gt; <strong>Tool bars</strong> —&gt; <strong>Text Formatting</strong></p>

<p>And the tool will be displayed</p>

<p><img src="https://salsa.debian.org/zleap-guest/screenshots/-/raw/master/libreoffice7/impress/Terxt-formatting-from-menu.png" alt="View tool bars menu"></p>

<p>Video below illustrates process</p>

<iframe width="560" height="315" src="https://diode.zone/videos/embed/115365ca-04db-4f0f-8ada-c6b080c3d38e" frameborder="0" allowfullscreen=""></iframe>

<p><a href="/paulsutton/tag:libreoffice7" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">libreoffice7</span></a>,<a href="/paulsutton/tag:impress" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">impress</span></a>,<a href="/paulsutton/tag:display" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">display</span></a>,<a href="/paulsutton/tag:text" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">text</span></a>,<a href="/paulsutton/tag:formatting" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">formatting</span></a>,toolbar,
<a href="/paulsutton/tag:help" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">help</span></a>,<a href="/paulsutton/tag:support" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">support</span></a>.</p>

<p><a href="http://creativecommons.org/licenses/by-sa/4.0/" rel="nofollow"><img alt="Creative Commons Licence" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png"/></a><br/>This work is licensed under a <a href="http://creativecommons.org/licenses/by-sa/4.0/" rel="nofollow">Creative Commons Attribution-ShareAlike 4.0 International License</a></p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/liberoffice-7-impress-text-formatting-tool-bar</guid>
      <pubDate>Wed, 16 Dec 2020 08:48:17 +0000</pubDate>
    </item>
    <item>
      <title>Add  more functions</title>
      <link>https://personaljournal.ca/paulsutton/add-more-functions</link>
      <description>&lt;![CDATA[Add  more functions&#xA;&#xA;I have added a few more maths functions to the application and also provided a clear function.  There are still a few items to add to help improve debugging but the application is starting to take shape. &#xA;&#xA;Notes &#xA; &#xA;window = Tk()&#xA;window.title(&#39;Maths Application&#39;)&#xA;window.geometry(&#34;570x150&#34;) # w x h&#xA;window.resizable(0,0)&#xA;&#xA;The above code is being modified as I go. So I am changing the window size depending on what is being displayed.&#xA;&#xA;I have also made the Window title reflect the purpose of the application.&#xA;&#xA;That the source code now has &#39;result&#39; as a label rather than output.  This will show up future screenshots. &#xA;&#xA;addition app&#xA;&#xA;The code for the above is as follows. &#xA;&#xA;!/usr/bin/env python&#xA;import Tkinter # note use of caps&#xA;from Tkinter import &#xA;&#xA;window = Tk()&#xA;window.title(&#39;Maths Application&#39;)&#xA;window.geometry(&#34;570x150&#34;) # w x h&#xA;window.resizable(0,0)&#xA;&#xA;define button actions&#xA;def btn1():&#xA;&#x9;#convert box text in to integers&#x9;&#xA;&#x9;ent1 = int(entrytext.get())&#xA;&#x9;ent2 = int(entrytext2.get())&#xA;&#x9;&#xA;&#x9;#add the 2 integers and store in variable add&#xA;&#x9;add = (ent1 + ent2)&#xA;&#x9;print (add)&#xA;&#x9;&#xA;&#x9;#insert value of variable add in&#x9;to box outtext &#xA;&#x9;outtext1.insert(0,str(add)) # insert response&#xA;&#xA;def btn2():&#xA;&#x9;#print(&#34;subtraction&#34;)&#xA;&#x9;ent1 = int(entrytext.get())&#xA;&#x9;ent2 = int(entrytext2.get())&#xA;&#x9;&#xA;&#x9;#subtract the 2 integers and store in variable sub&#xA;&#x9;sub = (ent1 - ent2)&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;#insert value of variable sub in&#x9;to box outtext &#xA;&#x9;outtext1.insert(0,str(sub)) # insert response&#x9;&#xA;&#x9;&#xA;def btn3():&#xA;&#x9;#print(&#34;multiply&#34;)&#xA;&#x9;ent1 = int(entrytext.get())&#xA;&#x9;ent2 = int(entrytext2.get())&#xA;&#x9;&#xA;&#x9;#multiply the 2 integers and store in variable mul&#xA;&#x9;mul = (ent1  ent2)&#xA;&#x9;&#x9;&#xA;&#x9;#insert value of variable mul in&#x9;to box outtext &#xA;&#x9;outtext1.insert(0,str(mul)) # insert response&#x9;&#x9;&#xA;&#xA;def btn4():&#xA;&#x9;#print(&#34;divide&#34;)&#xA;&#x9;ent1 = int(entrytext.get())&#xA;&#x9;ent2 = int(entrytext2.get())&#xA;&#x9;&#xA;&#x9;#multiply the 2 integers and store in variable div&#xA;&#x9;div = (ent1 / ent2)&#xA;&#x9;&#x9;&#xA;&#x9;#insert value of variable mul in&#x9;to box outtext &#xA;&#x9;outtext1.insert(0,str(div)) # insert response&#x9;&#xA;&#x9;&#xA;clear boxes&#xA;def clear():&#xA;&#x9;#print(&#34;clear boxes&#34;) # leave in for legacy testing&#xA;&#x9;entrytext.delete(0, END) # clear input box&#xA;&#x9;entrytext2.delete(0, END) # clear input box2&#xA;&#x9;outtext1.delete(0, END) # clear output box&#xA;&#x9;&#xA;btntog2 = Button( window, text =&#39;+&#39;, command=btn1) # add&#xA;btntog3 = Button( window, text =&#39;-&#39;, command=btn2)  # subtract&#xA;btntog4 = Button( window, text =&#39;x&#39;, command=btn3) #multiply&#xA;btntog5 = Button( window, text =&#39;/&#39;, command=btn4) #divide&#xA;btntog6 = Button( window, text =&#39;Clear&#39;, command=clear) #clear&#xA;btnexit = Button( window, text =&#39;Exit&#39;,command=exit)&#x9; #exit&#xA;&#xA;define some labels&#xA;box1 = Label(window, text=&#34;1st Value&#34;)&#xA;box2 = Label(window, text=&#34;2nd Value&#34;)&#xA;box3 = Label(window, text=&#34;Result&#34;)&#xA;&#xA;define entry box &#xA;entry1 = StringVar() # this is our entry box&#xA;entry2 = StringVar()&#xA;entrytext = Entry(window, textvariable=entry1) # this is our entry box&#xA;entrytext2 = Entry(window, textvariable=entry2) # this is our second entry box&#xA;&#xA;define out box &#xA;&#xA;entry2 = StringVar() # this is our output box&#xA;outtext1 = Entry(window, textvariable=entry2) # this is our output box&#xA;&#xA;display boxes&#xA;entrytext.grid(row = 3, column = 2,)  #display entry box&#xA;entrytext2.grid(row = 3, column = 3,)  #display entry box&#xA;outtext1.grid(row = 3, column = 4,) #display output box&#xA;&#xA;place labels&#xA;box1.grid(row = 1&#x9;, column = 2, padx = 5, pady = 5)&#xA;box2.grid(row = 1&#x9;, column = 3, padx = 5, pady = 5)&#xA;box3.grid(row = 1&#x9;, column = 4, padx = 5, pady = 5)&#xA;&#xA;buttons&#xA;btntog2.grid(row = 4, column = 2, padx = 1, pady = 1) # addition button&#xA;btntog3.grid(row = 4, column = 3, padx = 1, pady = 1) # subtraction button&#xA;btntog4.grid(row = 5, column = 2, padx = 1, pady = 1) # multiply button&#xA;btntog5.grid(row = 5, column = 3, padx = 1, pady = 1) # divide button&#xA;btntog6.grid(row = 4, column = 6, padx = 1, pady = 1) # clear button&#xA;btnexit.grid(row = 3, column = 6, padx = 1, pady = 1) # exit button&#xA;&#xA;window.mainloop()&#xA;&#xA;The code that I used for a previous application to detect if numerical values have been used is below but provided &#39;as is&#39; for now.&#xA;&#xA;def response():&#xA;&#x9;&#x9;&#xA;&#x9;msg = &#34;error : must be a text value&#34;&#xA;&#xA;&#x9;i = circletext.get()&#xA;&#x9;y = i.isdigit()&#xA;&#x9;l = len(circletext.get())&#xA;&#x9;#print l&#xA;&#x9;if y == True or l == 0:&#xA;&#x9;&#x9;circletext.insert(0,(msg))&#xA;&#x9;&#x9;&#xA;&#x9;else:&#x9;&#xA;&#x9;&#x9;x = random.choice(RESPONSES)&#xA;&#x9;&#x9;circletext2.delete(0, END) # clear prev output&#xA;&#x9;&#x9;circletext2.insert(0,str(x)) # insert response&#xA;&#xA;I will integrate a version of this in to the main code. &#xA;&#xA;#python, #tkinter, #programming, #python, #graphic, #applications, #bugs, #troubleshooting, #howto, #paignton, #library, #virtual, #codeclub&#xA;&#xA;Happy to provide help and support via decentralised social media.  I can be contacted on Mastodon here. You can get a free account on the http://qoto.org instance by following this link.&#xA;&#xA;cc-by logo&#xA;&#xA;Licenced under Attribution 4.0 International (CC BY 4.0)&#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Add  more functions</p>

<p>I have added a few more maths functions to the application and also provided a clear function.  There are still a few items to add to help improve debugging but the application is starting to take shape.</p>

<p><strong>Notes</strong></p>

<pre><code>window = Tk()
window.title(&#39;Maths Application&#39;)
window.geometry(&#34;570x150&#34;) # w x h
window.resizable(0,0)
</code></pre>
<ol><li><p>The above code is being modified as I go. So I am changing the window size depending on what is being displayed.</p></li>

<li><p>I have also made the Window title reflect the purpose of the application.</p></li>

<li><p>That the source code now has &#39;result&#39; as a label rather than output.  This will show up future screenshots.</p></li></ol>

<p><img src="https://raw.githubusercontent.com/zleap/blogmedia/master/tkinter/AdditionApp2.png" alt="addition app"></p>

<p>The code for the above is as follows.</p>

<pre><code>#!/usr/bin/env python
import Tkinter # note use of caps
from Tkinter import *

window = Tk()
window.title(&#39;Maths Application&#39;)
window.geometry(&#34;570x150&#34;) # w x h
window.resizable(0,0)

#define button actions
def btn1():
	#convert box text in to integers	
	ent1 = int(entrytext.get())
	ent2 = int(entrytext2.get())
	
	#add the 2 integers and store in variable add
	add = (ent1 + ent2)
	print (add)
	
	#insert value of variable add in	to box outtext 
	outtext1.insert(0,str(add)) # insert response

def btn2():
	#print(&#34;subtraction&#34;)
	ent1 = int(entrytext.get())
	ent2 = int(entrytext2.get())
	
	#subtract the 2 integers and store in variable sub
	sub = (ent1 - ent2)
	
	
	#insert value of variable sub in	to box outtext 
	outtext1.insert(0,str(sub)) # insert response	
	
def btn3():
	#print(&#34;multiply&#34;)
	ent1 = int(entrytext.get())
	ent2 = int(entrytext2.get())
	
	#multiply the 2 integers and store in variable mul
	mul = (ent1 * ent2)
		
	#insert value of variable mul in	to box outtext 
	outtext1.insert(0,str(mul)) # insert response		

def btn4():
	#print(&#34;divide&#34;)
	ent1 = int(entrytext.get())
	ent2 = int(entrytext2.get())
	
	#multiply the 2 integers and store in variable div
	div = (ent1 / ent2)
		
	#insert value of variable mul in	to box outtext 
	outtext1.insert(0,str(div)) # insert response	
	
#clear boxes
def clear():
	#print(&#34;clear boxes&#34;) # leave in for legacy testing
	entrytext.delete(0, END) # clear input box
	entrytext2.delete(0, END) # clear input box2
	outtext1.delete(0, END) # clear output box
	
btn_tog2 = Button( window, text =&#39;+&#39;, command=btn1) # add
btn_tog3 = Button( window, text =&#39;-&#39;, command=btn2)  # subtract
btn_tog4 = Button( window, text =&#39;x&#39;, command=btn3) #multiply
btn_tog5 = Button( window, text =&#39;/&#39;, command=btn4) #divide
btn_tog6 = Button( window, text =&#39;Clear&#39;, command=clear) #clear
btn_exit = Button( window, text =&#39;Exit&#39;,command=exit)	 #exit

# define some labels
box1 = Label(window, text=&#34;1st Value&#34;)
box2 = Label(window, text=&#34;2nd Value&#34;)
box3 = Label(window, text=&#34;Result&#34;)

#define entry box 
entry1 = StringVar() # this is our entry box
entry2 = StringVar()
entrytext = Entry(window, textvariable=entry1) # this is our entry box
entrytext2 = Entry(window, textvariable=entry2) # this is our second entry box

#define out box 

entry2 = StringVar() # this is our output box
outtext1 = Entry(window, textvariable=entry2) # this is our output box

#display boxes
entrytext.grid(row = 3, column = 2,)  #display entry box
entrytext2.grid(row = 3, column = 3,)  #display entry box
outtext1.grid(row = 3, column = 4,) #display output box

#place labels
box1.grid(row = 1	, column = 2, padx = 5, pady = 5)
box2.grid(row = 1	, column = 3, padx = 5, pady = 5)
box3.grid(row = 1	, column = 4, padx = 5, pady = 5)

#buttons
btn_tog2.grid(row = 4, column = 2, padx = 1, pady = 1) # addition button
btn_tog3.grid(row = 4, column = 3, padx = 1, pady = 1) # subtraction button
btn_tog4.grid(row = 5, column = 2, padx = 1, pady = 1) # multiply button
btn_tog5.grid(row = 5, column = 3, padx = 1, pady = 1) # divide button
btn_tog6.grid(row = 4, column = 6, padx = 1, pady = 1) # clear button
btn_exit.grid(row = 3, column = 6, padx = 1, pady = 1) # exit button

window.mainloop()


</code></pre>

<p>The code that I used for a previous application to detect if numerical values have been used is below but provided &#39;as is&#39; for now.</p>

<pre><code>def response():
		
	msg = &#34;error : must be a text value&#34;

	i = circletext.get()
	y = i.isdigit()
	l = len(circletext.get())
	#print l
	if y == True or l == 0:
		circletext.insert(0,(msg))
		
	else:	
		x = random.choice(RESPONSES)
		circletext2.delete(0, END) # clear prev output
		circletext2.insert(0,str(x)) # insert response
</code></pre>

<p>I will integrate a version of this in to the main code.</p>

<p><a href="/paulsutton/tag:python" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">python</span></a>, <a href="/paulsutton/tag:tkinter" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">tkinter</span></a>, <a href="/paulsutton/tag:programming" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">programming</span></a>, <a href="/paulsutton/tag:python" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">python</span></a>, <a href="/paulsutton/tag:graphic" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">graphic</span></a>, <a href="/paulsutton/tag:applications" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">applications</span></a>, <a href="/paulsutton/tag:bugs" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">bugs</span></a>, <a href="/paulsutton/tag:troubleshooting" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">troubleshooting</span></a>, <a href="/paulsutton/tag:howto" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">howto</span></a>, <a href="/paulsutton/tag:paignton" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">paignton</span></a>, <a href="/paulsutton/tag:library" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">library</span></a>, <a href="/paulsutton/tag:virtual" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">virtual</span></a>, <a href="/paulsutton/tag:codeclub" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">codeclub</span></a></p>

<p>Happy to provide help and support via decentralised social media.  I can be contacted on Mastodon <a href="https://qoto.org/@zleap/" rel="nofollow">here</a>. You can get a free account on the <a href="http://qoto.org" rel="nofollow">http://qoto.org</a> instance by following <a href="https://qoto.org/invite/pN8gdTzi" rel="nofollow">this link</a>.</p>

<p><img src="https://raw.githubusercontent.com/zleap/blogmedia/master/88x31.png" alt="cc-by logo"></p>

<p><a href="https://creativecommons.org/licenses/by/4.0/" rel="nofollow">Licenced under Attribution 4.0 International (CC BY 4.0)</a></p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/add-more-functions</guid>
      <pubDate>Thu, 21 May 2020 06:44:22 +0000</pubDate>
    </item>
    <item>
      <title>Addition Application</title>
      <link>https://personaljournal.ca/paulsutton/addition-application</link>
      <description>&lt;![CDATA[Addition Application&#xA;&#xA;So following on from the previous posts, I am how sharing a small application, that makes use of what we have been learning. &#xA;&#xA;This presents 2 input boxes and an output box,  any values entered in to the first two,  the sum is placed in to the last box.&#xA;&#xA;addition app&#xA;&#xA;This is not perfect, but getting there slowly.&#xA;&#xA;We need to:-&#xA;&#xA;Fix the name of the button from button1&#xA;Detect if the user has entered numerical values&#xA;Detect for empty boxes&#xA;Make labels more useful&#xA;Fix spelling in comments&#xA;Fix clarity of comments&#xA;&#xA;The code for the above is as follows. &#xA;&#xA;!/usr/bin/env python&#xA;import Tkinter # note use of caps&#xA;from Tkinter import *&#xA;&#xA;window = Tk()&#xA;window.title(&#39;App 1&#39;)&#xA;window.geometry(&#34;650x125&#34;) # w x h&#xA;window.resizable(0,0)&#xA;&#xA;define button actions&#xA;def btn1():&#xA;&#x9;#convert box text in to integers&#x9;&#xA;&#x9;ent1 = int(entrytext.get())&#xA;&#x9;ent2 = int(entrytext2.get())&#xA;&#x9;&#xA;&#x9;#add the 2 integers and store in variable add&#xA;&#x9;add = (ent1 + ent2)&#xA;&#x9;print add&#xA;&#x9;&#xA;&#x9;#instert value add in&#x9;to box outtext &#xA;&#x9;outtext1.insert(0,str(add)) # insert response&#xA;&#x9;&#xA;btntog2 = Button( window, text =&#39;button1&#39;, command=btn1)&#xA;btnexit = Button( window, text =&#39;exit&#39;,command=exit)&#x9;&#xA;&#xA;define some labels&#xA;box1 = Label(window, text=&#34;Entry 1: &#34;)&#xA;box2 = Label(window, text=&#34;Entry 2: &#34;)&#xA;box3 = Label(window, text=&#34;Ouput1: &#34;)&#xA;&#xA;define entry box &#xA;entry1 = StringVar() # this is our entry box&#xA;entry2 = StringVar()&#xA;entrytext = Entry(window, textvariable=entry1) # this is our entry box&#xA;entrytext2 = Entry(window, textvariable=entry2) # this is our second entry box&#xA;&#xA;define out box &#xA;&#xA;entry2 = StringVar() # this is our output box&#xA;outtext1 = Entry(window, textvariable=entry2) # this is our output box&#xA;&#xA;display boxes&#xA;entrytext.grid(row = 3, column = 2,)  #display entry box&#xA;entrytext2.grid(row = 3, column = 3,)  #display entry box&#xA;outtext1.grid(row = 3, column = 4,) #display output box&#xA;&#xA;place labels&#xA;box1.grid(row = 1&#x9;, column = 2, padx = 5, pady = 5)&#xA;box2.grid(row = 1&#x9;, column = 3, padx = 5, pady = 5)&#xA;box3.grid(row = 1&#x9;, column = 4, padx = 5, pady = 5)&#xA;&#xA;buttons&#xA;btntog2.grid(row = 3, column = 5, padx = 5, pady = 5)&#xA;btnexit.grid(row = 3, column = 6, padx = 5, pady = 5)&#xA;&#xA;window.mainloop()&#xA;&#xA;#python, #tkinter, #programming, #python, #graphic, #applications, #bugs, #troubleshooting, #howto, #paignton, #library, #virtual, #codeclub&#xA;&#xA;Happy to provide help and support via decentralised social media.  I can be contacted on Mastodon here. You can get a free account on the http://qoto.org instance by following this link.&#xA;&#xA;cc-by logo&#xA;&#xA;Licenced under Attribution 4.0 International (CC BY 4.0)&#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Addition Application</p>

<p>So following on from the previous posts, I am how sharing a small application, that makes use of what we have been learning.</p>

<p>This presents 2 input boxes and an output box,  any values entered in to the first two,  the sum is placed in to the last box.</p>

<p><img src="https://raw.githubusercontent.com/zleap/blogmedia/master/tkinter/AdditionApp.png" alt="addition app"></p>

<p>This is not perfect, but getting there slowly.</p>

<p>We need to:-</p>
<ul><li>Fix the name of the button from button1</li>
<li>Detect if the user has entered numerical values</li>
<li>Detect for empty boxes</li>
<li>Make labels more useful</li>
<li>Fix spelling in comments</li>
<li>Fix clarity of comments</li></ul>

<p>The code for the above is as follows.</p>

<pre><code>#!/usr/bin/env python
import Tkinter # note use of caps
from Tkinter import *

window = Tk()
window.title(&#39;App 1&#39;)
window.geometry(&#34;650x125&#34;) # w x h
window.resizable(0,0)

#define button actions
def btn1():
	#convert box text in to integers	
	ent1 = int(entrytext.get())
	ent2 = int(entrytext2.get())
	
	#add the 2 integers and store in variable add
	add = (ent1 + ent2)
	print add
	
	#instert value add in	to box outtext 
	outtext1.insert(0,str(add)) # insert response
	
btn_tog2 = Button( window, text =&#39;button1&#39;, command=btn1)
btn_exit = Button( window, text =&#39;exit&#39;,command=exit)	

# define some labels
box1 = Label(window, text=&#34;Entry 1: &#34;)
box2 = Label(window, text=&#34;Entry 2: &#34;)
box3 = Label(window, text=&#34;Ouput1: &#34;)

#define entry box 
entry1 = StringVar() # this is our entry box
entry2 = StringVar()
entrytext = Entry(window, textvariable=entry1) # this is our entry box
entrytext2 = Entry(window, textvariable=entry2) # this is our second entry box

#define out box 

entry2 = StringVar() # this is our output box
outtext1 = Entry(window, textvariable=entry2) # this is our output box

#display boxes
entrytext.grid(row = 3, column = 2,)  #display entry box
entrytext2.grid(row = 3, column = 3,)  #display entry box
outtext1.grid(row = 3, column = 4,) #display output box

#place labels
box1.grid(row = 1	, column = 2, padx = 5, pady = 5)
box2.grid(row = 1	, column = 3, padx = 5, pady = 5)
box3.grid(row = 1	, column = 4, padx = 5, pady = 5)

#buttons
btn_tog2.grid(row = 3, column = 5, padx = 5, pady = 5)
btn_exit.grid(row = 3, column = 6, padx = 5, pady = 5)

window.mainloop()

</code></pre>

<p><a href="/paulsutton/tag:python" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">python</span></a>, <a href="/paulsutton/tag:tkinter" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">tkinter</span></a>, <a href="/paulsutton/tag:programming" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">programming</span></a>, <a href="/paulsutton/tag:python" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">python</span></a>, <a href="/paulsutton/tag:graphic" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">graphic</span></a>, <a href="/paulsutton/tag:applications" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">applications</span></a>, <a href="/paulsutton/tag:bugs" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">bugs</span></a>, <a href="/paulsutton/tag:troubleshooting" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">troubleshooting</span></a>, <a href="/paulsutton/tag:howto" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">howto</span></a>, <a href="/paulsutton/tag:paignton" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">paignton</span></a>, <a href="/paulsutton/tag:library" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">library</span></a>, <a href="/paulsutton/tag:virtual" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">virtual</span></a>, <a href="/paulsutton/tag:codeclub" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">codeclub</span></a></p>

<p>Happy to provide help and support via decentralised social media.  I can be contacted on Mastodon <a href="https://qoto.org/@zleap/" rel="nofollow">here</a>. You can get a free account on the <a href="http://qoto.org" rel="nofollow">http://qoto.org</a> instance by following <a href="https://qoto.org/invite/pN8gdTzi" rel="nofollow">this link</a>.</p>

<p><img src="https://raw.githubusercontent.com/zleap/blogmedia/master/88x31.png" alt="cc-by logo"></p>

<p><a href="https://creativecommons.org/licenses/by/4.0/" rel="nofollow">Licenced under Attribution 4.0 International (CC BY 4.0)</a></p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/addition-application</guid>
      <pubDate>Wed, 20 May 2020 06:30:00 +0000</pubDate>
    </item>
    <item>
      <title>Tidying up our application</title>
      <link>https://personaljournal.ca/paulsutton/tidying-up-our-application</link>
      <description>&lt;![CDATA[Tidying up our application&#xA;&#xA;So my last post produced something that did not really look very good.  So I have now tidied the code up a little bit to make it look better.&#xA;&#xA;So one of the useful things within this is to adjust the dimensions of our application, so everything fits in to the window area nicely, but not leave too much empty space. &#xA;&#xA;!/usr/bin/env python&#xA;import Tkinter # note use of caps&#xA;from Tkinter import *&#xA;&#xA;window = Tk()&#xA;window.title(&#39;App 1&#39;)&#xA;window.geometry(&#34;600x50&#34;) # w x h&#xA;window.resizable(0,0)&#xA;&#xA;define entry box &#xA;&#xA;entry1 = StringVar() # this is our entry box&#xA;entrytext = Entry(window, textvariable=entry1) # this is our entry box&#xA;entrytext2 = Entry(window, textvariable=entry1) # this is our second entry box&#xA;define out box &#xA;&#xA;entry2 = StringVar() # this is our output box&#xA;outtext1 = Entry(window, textvariable=entry2) # this is our output box&#xA;&#xA;display boxes&#xA;entrytext.grid(row = 3, column = 2,)  #display entry box&#xA;entrytext2.grid(row = 3, column = 3,)  #display entry box&#xA;outtext1.grid(row = 3, column = 4,) #display output box&#xA;&#xA;window.mainloop()&#xA;&#xA;So here we have a window, with three text boxes. &#xA;&#xA;app1 &#xA;&#xA;Which is starting to look a little better.  The main bit of advice I can give here, is test, test and test again, that way you know your application is working as you go. &#xA;&#xA;#tkinter,#python,#gui,#programming.&#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Tidying up our application</p>

<p>So my last post produced something that did not really look very good.  So I have now tidied the code up a little bit to make it look better.</p>

<p>So one of the useful things within this is to adjust the dimensions of our application, so everything fits in to the window area nicely, but not leave too much empty space.</p>

<pre><code>#!/usr/bin/env python
import Tkinter # note use of caps
from Tkinter import *

window = Tk()
window.title(&#39;App 1&#39;)
window.geometry(&#34;600x50&#34;) # w x h
window.resizable(0,0)

#define entry box 

entry1 = StringVar() # this is our entry box
entrytext = Entry(window, textvariable=entry1) # this is our entry box
entrytext2 = Entry(window, textvariable=entry1) # this is our second entry box
#define out box 

entry2 = StringVar() # this is our output box
outtext1 = Entry(window, textvariable=entry2) # this is our output box


#display boxes
entrytext.grid(row = 3, column = 2,)  #display entry box
entrytext2.grid(row = 3, column = 3,)  #display entry box
outtext1.grid(row = 3, column = 4,) #display output box


window.mainloop()

</code></pre>

<p>So here we have a window, with three text boxes.</p>

<p><img src="https://raw.githubusercontent.com/zleap/blogmedia/master/tkinter/app1.png" alt="app1"></p>

<p>Which is starting to look a little better.  The main bit of advice I can give here, is <strong>test, test and test again</strong>, that way you know your application is working as you go.</p>

<p><a href="/paulsutton/tag:tkinter" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">tkinter</span></a>,<a href="/paulsutton/tag:python" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">python</span></a>,<a href="/paulsutton/tag:gui" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">gui</span></a>,<a href="/paulsutton/tag:programming" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">programming</span></a>.</p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/tidying-up-our-application</guid>
      <pubDate>Mon, 18 May 2020 06:30:00 +0000</pubDate>
    </item>
    <item>
      <title>More tkinter : Add entry and text box</title>
      <link>https://personaljournal.ca/paulsutton/more-tkinter-add-entry-and-text-box</link>
      <description>&lt;![CDATA[More tkinter : Add entry and text box&#xA;&#xA;This code adds a box to our application, a box can serve either as a text output box OR a text entry box.&#xA;&#xA;Note I have included the whole program here.  I have also defined the size of our application.  &#xA;&#xA;While the window is bigger and the boxes are at the top, the idea is that it just displays those boxes.  We can tidy things up later. &#xA;&#xA;!/usr/bin/env python&#xA;import Tkinter # note use of caps&#xA;from Tkinter import *&#xA;&#xA;window = Tk()&#xA;window.title(&#39;GUI Tkinter 1&#39;)&#xA;window.geometry(&#34;300x250&#34;) # w x h&#xA;window.resizable(0,0)&#xA;&#xA;define entry box &#xA;&#xA;circleVar = StringVar()&#xA;circletext = Entry(window, textvariable=circleVar)&#xA;&#xA;define out box &#xA;&#xA;circleVar2 = StringVar()&#xA;circletext2 = Entry(window, textvariable=circleVar2)&#xA;&#xA;circleVar2 = StringVar()&#xA;circletext2 = Entry(window, textvariable=circleVar2)&#xA;&#xA;display boxes&#xA;circletext.grid(row = 1, column = 2,)&#xA;circletext2.grid(row = 2, column = 2,)&#xA;&#xA;window.mainloop()&#xA;&#xA;We get:&#xA;&#xA;tk label&#xA;&#xA;#tkinter,#python,#gui,#programming. &#xA;&#xA;hr&#xD;&#xA;&#xD;&#xA;table&#xD;&#xA;thead&#xD;&#xA;trtda rel=&#34;me&#34; href=&#34;https://qoto.org/@zleap&#34;Mastodon/a/td&#xD;&#xA;tda href=&#34;https://wiki.ircnow.org/?n=Shelllabs.Intro&#34;ShellLabs/td&#xD;&#xA;tda href=&#34;https://joinmastodon.org/&#34;Join Mastodon/a/td/tr/thead/table&#xD;&#xA;center&#xD;&#xA;AI statement : b Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. /b&#xD;&#xA;/center&#xD;&#xA;&#xD;&#xA;a href=&#34;https://liberapay.com/PaulSutton/donate&#34;img alt=&#34;Donate using Liberapay&#34; src=&#34;https://liberapay.com/assets/widgets/donate.svg&#34;/a&#xD;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>More tkinter : Add entry and text box</p>

<p>This code adds a box to our application, a box can serve either as a text output box OR a text entry box.</p>

<p>Note I have included the whole program here.  I have also defined the size of our application.</p>

<p>While the window is bigger and the boxes are at the top, the idea is that it just displays those boxes.  We can tidy things up later.</p>

<pre><code>#!/usr/bin/env python
import Tkinter # note use of caps
from Tkinter import *

window = Tk()
window.title(&#39;GUI Tkinter 1&#39;)
window.geometry(&#34;300x250&#34;) # w x h
window.resizable(0,0)

#define entry box 

circleVar = StringVar()
circletext = Entry(window, textvariable=circleVar)

#define out box 

circleVar2 = StringVar()
circletext2 = Entry(window, textvariable=circleVar2)

circleVar2 = StringVar()
circletext2 = Entry(window, textvariable=circleVar2)


#display boxes
circletext.grid(row = 1, column = 2,)
circletext2.grid(row = 2, column = 2,)


window.mainloop()

</code></pre>

<p>We get:</p>

<p><img src="https://raw.githubusercontent.com/zleap/blogmedia/master/tkinter/boxes.png" alt="tk label"></p>

<p><a href="/paulsutton/tag:tkinter" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">tkinter</span></a>,<a href="/paulsutton/tag:python" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">python</span></a>,<a href="/paulsutton/tag:gui" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">gui</span></a>,<a href="/paulsutton/tag:programming" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">programming</span></a>.</p>

<hr>

<p><table>
<thead>
<tr><td><a href="https://qoto.org/@zleap" rel="nofollow">Mastodon</a></td>
<td><a href="https://wiki.ircnow.org/?n=Shelllabs.Intro" rel="nofollow">ShellLabs</td>
<td><a href="https://joinmastodon.org/" rel="nofollow">Join Mastodon</a></td></tr></thead></table>

AI statement : <b> Consent is NOT granted to use the content of this blog for the purposes of AI training or similar activity.  Consent CANNOT be assumed, it has to be granted. </b>
</p>

<p><a href="https://liberapay.com/PaulSutton/donate" rel="nofollow"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
]]></content:encoded>
      <guid>https://personaljournal.ca/paulsutton/more-tkinter-add-entry-and-text-box</guid>
      <pubDate>Sun, 17 May 2020 06:30:00 +0000</pubDate>
    </item>
  </channel>
</rss>