Paul Sutton

Python

Code Club 4/10/2021

I am back at Code Club today, 2nd session since our return. If you are still not sure what Code Club is, then you have clearly being living in a cave since about 2012. Anyway, it is a coding club for children, generally 9-13 years of age.

The Paignton Club is a little more advanced, in that some of the attendees are working through a responsive web design course.

It would be really good to get MORE code clubs in Torbay, and in fact would be really nice if those clubs could collaborate, share expertise, maybe some resources.

Links

Tags

#Coding,#Programming,#Scratch,#Python,#HTML,#CSS,#Python,#MicroBit,#RaspberryPi,#Lego,#FreeCodeCamp,#More

Confy – Conferences schedule viewer

This was mentioned at the South Devon Tech Jam in May 2021, so thank you to Seabass for this. It is a conference schedule viewer, has been used as events such as Fosdem, so looks really good. I think Noisytoot was trying to compile this, so hopefully get an update over the next month and perhaps at the next Jam on June 12th. Or perhaps next week at the DCGLUG meet, Saturday 15th May 2021 @ 12:00 on jit.si.

I am also at a Debian Conference 2021 planning meeting on Monday 10th May, so will give this a mention too. Could be useful.

REFERENCES

TAGS

#FreeSoftware,#Conference,#Schedule,#Viewer,#Gtk3, #libhandy,#Python3,#python-gobjects,#Meson,#Ninja

Donate using Liberapay

Creative Commons Licence
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License

Website on pi

Donate using Liberapay

I spent some time on last night, setting up a mini web server on m Raspberry pi.

So running a http server on a Raspberry Pi.

For this project I am just using the python3-test-server package,

  1. Install python3-test-server
  2. Create a directory to hold some html files
  3. Change to this directory
  4. Create a very basic html file e.g index.html
  5. run python3 -m http.server:7800 where 7800 is the port you want to use

web server on pi

In the browser go to ip:7800

Website on pi

What I have done here, however is

  • Run the server on the pi,
  • Connected via ssh to create the site files and run the server
  • Edited the basic website on the pi via ssh, by running a text editor
  • To copy other files directly from my main PC to the Pi i used

    • scp file.jpg pi@ip:path e.g
      • scp file.jpg pi@ip:/home/pi/html/

I have, gone a little further than this:

In order to share my free software video dvd (and other resources) with people I:-

  • Uploaded files to the server
  • Created a web link to the iso file
  • Edited my router firewall so it would allow a connection to the pi

I then shared the appropriate IP address with a friend via irc so he could download the ISO file, and it worked really well.

REFERENCES

TAGS

#YearOfTheFediverse,#httpServer,#website,#html,#css, #Python,#Firewall,#Networking,ProblemSolving,#Skills,#IT

Creative Commons Licence
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License

Site Index

Donate using Liberapay

  1. Click on a link.
  2. Scroll to bottom of page.
    • Any posts / pages within this blog will be displayed.

A

#Astronify #Adenine #AminoAcid #Astronomy #AralBalkan #AstroBiology #AstroChemistry #apg #Apt #Aptitude #Africa #Activism #Analytics #Api #Arduino #AMES #arXiv #Academy #Abuse #Afghanistan

B

#Blog #BioChemistry #Biology #bash #better #BigBluButton #BibTeX #Browser #Beamer #Bullseye #Buster #Bookworm

C

#Cytosine #Conditions #Cryptpad #Cosmology #Chemistry #Console #Chat #Conference #Code #Coding #CodeClub #Cornwall #Covid19 #Corona #CoronaVirus #CreativeCommons #Commons #Chrome #Chromium #Charity #Creative #Education #CPD #cpd #CreativeEducation #CTAN

D

#dna #DNA #Disroot #disroot #Decentralised #Decentralized #dcglug #dclug #Debian #Donate #Donation #Debconf #BASH #Devon #Digital #DRM #Diaspora #DiodeZone #Development #Data #Detox #Docker #DeepLearning #Documentation

E

#emacs #Editing #Events #EventManagement #Employment #Email #Education #Exploration, #Ethics #Elements #Exploration #EveryonesInvited

F

#Flockingbird #Framablog #FramaBlog #Fediverse #Federated #Firefox #Fosdem #Freedom #FreeSoftware #Foundation #FSF #FSFE #Friendica #Framework #FreeBSD #FalconsEye #FOSSandCrafts #FutureLearn

G

#GoatCounter #Guanine #Greek #Gimp #Galaxy #GoDot #GNU #GNOME #GUI #Gamma #Ghostreply #GPL #GraphicsMagick #gm #GoAccess #gold #GettingStarted #Git #GitLab #Gitlab #GDPR #Galculator #Games #Engine

H

#Hubble #Hexchat #Hack #Hacking #Hardware #Hosting #htop

I

#information #Inkscape #Image #ImageManipulation #IRC #Index #Invidious

J

#JamesWebb #JoeEditor #Jitsi #Jit.si

K

#kstars #Kanban #Kenya #KDE #KeepingChildrenSafeinEducation, #KCSIE

L

#Linux #LinuxMint #LibreOffice #LiberaPay #LibrePlanet #Lecture #Learning #LibreOfficeWriter #LibreOfficeCalc #LibreOfficeImpres #LibreOfficeDraw #LibreOfficeGettingStarted #LaTeX #LXDE #LGPL #Lynx #Librem #Libre #LibreLounge

M

#Mastodon #Meetings #Management #Mobilizon #Meeting #Matomo #Map #Mapscii #Mercury #mercury #mining #Matrix #Moon #Mars #Manganese #Materials

N

#Nextcloud #Nebula #NetHack #Nano #Nucleobases #network #NGINX #NaCl

O

#OpenUniversity #OpenLearn #OU #Online #Overleaf #OwnCloud #OpenStreetMap #OpenData #Open #Overleaf

P

#Physics #Podcast #Payment #Password #Public #Paypal #Photo #Photograph #Photos #Photographs #Python #Python3 #Programming #PixelFed #PeerTube #PowderToy #Pleroma #Planet #PDF #Package #pinebook #pinephone #Purism #Plausible #ProtoSchool #PeriodicTable #Paper #Privacy

Q

R

#rna #RNA #Rights #RocksAndDiamonds #Recovery #RadioAstronomy #Research #RedBubble

S

#Science #Scratch #Scratch2 #Scratch3 #smallweb #Sitejs #Space #Stars #Stellarium #Stripe #Security #stsci #Seagl #Social #SocialHub #SDTJ #SouthDevonTechJam #Solarus #Synaptic #Schools #Solid #Shynet #Scismic #ScienceDaily #Stickers #Symmetry #Salt #SodiumChloride

T

#terms #Telescope #TheOpenUniversity #Terminal #Talk #Thunderbird #Torbay #TeX #Topic #Thunar #Thymine #tailings #Top #Tilde #TextEditor #Toot #Translation #Trojans #TorbayTrojans

U

#Uracil #Umami #UniverseOfLearning

V

#Vaccine #VokoScreen #VLC #Volunteering #Volunteer #VultureNethack #vultureseye #Virgo

W

#Website #Work #wireless #wicd #wayland #weatherinfo #Wormhole

X

#Xournal #Xchat #XFCE #XFCE4 #xray #XMPP #xorg

Y

#YearOfTheFediverse

Z

#Zoo

Paignton library summer virtual Code Club-4

Further to previous post

Carrying on with a Python theme. If you have been following this Virtual Code Club since March, then you will have completed the modules, so I don't think it is fair to keep repeating this.

It look like Repl.it now supports Turtle graphics, which is great for the Code Club modules.

Repl.it supports the following:-

Pgzero – This is a simpler framework for teaching using creation of games.

So feel free to check out these and the websites and see if you can get coding games in Python, as Repl.it is collaborative then it makes it easier to work as part of small teams on this.

I am on Repl.it as @zleap

#PLAIC_codeclub,#codeclub,#replit,#codeclub,#python,#games, #pygame,#pgzero,#pyxel

Paignton Library Summer Virtual Code Club 3

So further to the previous post

Lets move on to Python.

Paignton Library will be sending these activities out via Social media using the hashtag #PLAIC_codeclub

If you don't already have an account for either home or school then you can sign up to a free Trinket account at:-

While all activities are here

I appreciate that if you have been following the virtual code club since march. If you have, and you would like to move on then FreeCodeCamp have lots of tutorials:-

You may also want to look at signing up to Repl.it in order to gain collaborative browser based developer environment.

A new feature of Repl.it is Teams. I am currently investigating this.

#python,#codeclub,#PLAIC_codeclub

Add more functions

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.

Notes

window = Tk()
window.title('Maths Application')
window.geometry("570x150") # w x h
window.resizable(0,0)
  1. The above code is being modified as I go. So I am changing the window size depending on what is being displayed.

  2. I have also made the Window title reflect the purpose of the application.

  3. That the source code now has 'result' as a label rather than output. This will show up future screenshots.

addition app

The code for the above is as follows.

#!/usr/bin/env python
import Tkinter # note use of caps
from Tkinter import *

window = Tk()
window.title('Maths Application')
window.geometry("570x150") # 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("subtraction")
	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("multiply")
	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("divide")
	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("clear boxes") # 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 ='+', command=btn1) # add
btn_tog3 = Button( window, text ='-', command=btn2)  # subtract
btn_tog4 = Button( window, text ='x', command=btn3) #multiply
btn_tog5 = Button( window, text ='/', command=btn4) #divide
btn_tog6 = Button( window, text ='Clear', command=clear) #clear
btn_exit = Button( window, text ='Exit',command=exit)	 #exit

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

#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()


The code that I used for a previous application to detect if numerical values have been used is below but provided 'as is' for now.

def response():
		
	msg = "error : must be a text value"

	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

I will integrate a version of this in to the main code.

#python, #tkinter, #programming, #python, #graphic, #applications, #bugs, #troubleshooting, #howto, #paignton, #library, #virtual, #codeclub

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.

cc-by logo

Licenced under Attribution 4.0 International (CC BY 4.0)

Addition Application

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

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.

addition app

This is not perfect, but getting there slowly.

We need to:-

  • Fix the name of the button from button1
  • Detect if the user has entered numerical values
  • Detect for empty boxes
  • Make labels more useful
  • Fix spelling in comments
  • Fix clarity of comments

The code for the above is as follows.

#!/usr/bin/env python
import Tkinter # note use of caps
from Tkinter import *

window = Tk()
window.title('App 1')
window.geometry("650x125") # 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 ='button1', command=btn1)
btn_exit = Button( window, text ='exit',command=exit)	

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

#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()

#python, #tkinter, #programming, #python, #graphic, #applications, #bugs, #troubleshooting, #howto, #paignton, #library, #virtual, #codeclub

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.

cc-by logo

Licenced under Attribution 4.0 International (CC BY 4.0)

More improvements

Adding labels

So last time we added some text boxes and made the application a little more presentable. Now we are going to do is add some labels above the boxes to help describe what they do.

Add this above were we define the entry boxes

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

Now add this below where we place the entry boxes but above window.mainloop()

#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)

So here we have a window, with three text boxes.

app1

So again we have something that looks a little more like an application.

#tkinter,#python,#gui,#programming.

Tidying up our application

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.

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.

#!/usr/bin/env python
import Tkinter # note use of caps
from Tkinter import *

window = Tk()
window.title('App 1')
window.geometry("600x50") # 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()

So here we have a window, with three text boxes.

app1

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.

#tkinter,#python,#gui,#programming.