From 4d41f524988e6bbcf977b432b10dd99849cce523 Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Fri, 9 Sep 2022 19:31:28 +0000 Subject: [PATCH] Initial Upload --- README.md | 37 +++++++++++- icon.png | Bin 0 -> 44291 bytes tRandom.py | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 209 insertions(+), 2 deletions(-) create mode 100644 icon.png create mode 100644 tRandom.py diff --git a/README.md b/README.md index b0433a1..a3519fd 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,36 @@ -# tRandom +# tRandom v0.4.2 -A simple GUI random number generator written in Python. \ No newline at end of file +tRandom is a simple, cross-platform, psuedo-random number generator for games and draws. Written in Python using tkinter. + +# License + +Distrubuted under the GPLv3 license. + +# About + +I created tRandom while a Python beginner, I was attempting to gain experience and create my first GUI application. Here it is to share for all. + +# Installing + +A deb package is available for v0.4.1 with two minor know issues. This has only been tested on Ubuntu 18.04, but being a 100% Python application with only included packages imported, it should run happily all over the place. + +To install elsewhere, the `tRandom.py` and `icon.png` files should be kept in the same folder, as long as you have the dependencies listed below installed, you will be able to launch the `tRandom.py` file directly. On Windows devices you may want to rename the `py` file to `tRandom.pyw` which will launch the program without a console window opening. + +# Dependencies + +If installing using the deb package all dependencies should be taken care of. + +- `python3` (Tested on 3.8) +- `python3-tk` + +# Known Issues + +- When installing with the DEB, the package will show in the `Lost & Found` category in your app launcher (At least on KDE Plasma). + +# Contributing + +If you do fancy contributing then please do feel free to do so, if you like, you can also add your name below. + +# Contributors + +Fred Boniface diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..89f15d27136ce1951f1108fe9aaaf821db909919 GIT binary patch literal 44291 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 literal 0 HcmV?d00001 diff --git a/tRandom.py b/tRandom.py new file mode 100644 index 0000000..06bf839 --- /dev/null +++ b/tRandom.py @@ -0,0 +1,174 @@ +#! /usr/bin/python3 + +# tRandom v0.4.2 (C) Fred Boniface 2020 +# Lisenced under GPLv3 + +from tkinter import * +import tkinter.messagebox +import random + +class Window(Frame): + + def __init__(self, master=None): + + Frame.__init__(self, master) + self.master = master + self.pack(fill=BOTH, expand=1) + + # Define prevResults list + self.prevResults = [" ", " ", " ", " "," ", " ", " ", " "] + + # Define Menu Bar + menu = Menu(self.master) + self.master.config(menu=menu) + fileMenu = Menu(menu) + menu.add_cascade(label="File", menu = fileMenu) + aboutMenu = Menu(menu) + menu.add_cascade(label="About", menu=aboutMenu) + + # Define menu emtries + fileMenu.add_command(label="Exit", command=self.clickExit) + aboutMenu.add_command(label="Version", command=self.clickVersion) + aboutMenu.add_command(label='License', command=self.clickLic) + aboutMenu.add_command(label="About", command=self.clickAbout) + + # Define top labels and entry boxes + l1 = Label(self, text="Enter the range of numbers below") + l1.place(x=5,y=10) + lIn1 = Label(self, text="Lowest Number:") + lIn1.place(x=5,y=40) + self.in1 = Entry(self, bd=1, width=7) + self.in1.place(x=150,y=40) + self.in1.insert(0,"1") + lIn2 = Label(self, text="Highest Number:") + lIn2.place(x=5,y=70) + self.in2 = Entry(self, bd=1, width=7) + self.in2.place(x=150, y=70) + self.in2.insert(0,"100") + + # Define result labels + self.l3 = Label(self, text="Your result:") + self.l3.place(x=5,y=100) + self.l2 = Label(self, font=("Courier", 55), fg="red") + self.l2.place(x=5,y=130) + self.l4 = Label(self, text="Past results:") + self.l4.place(x=160,y=100) + + # Define past result labels + self.past1 = Label(self) + self.past1.place(x=165,y=120) + self.past2 = Label(self) + self.past2.place(x=165,y=140) + self.past3 = Label(self) + self.past3.place(x=165,y=160) + self.past4 = Label(self) + self.past4.place(x=165,y=180) + self.past5 = Label(self) + self.past5.place(x=205,y=120) + self.past6 = Label(self) + self.past6.place(x=205,y=140) + self.past7 = Label(self) + self.past7.place(x=205,y=160) + self.past8 = Label(self) + self.past8.place(x=205,y=180) + + # Define bottom buttons + exitButton = Button(self, text="Exit", command=self.clickExit) + exitButton.place(x=5,y=225) + + rollButton = Button(self, text="Generate", command=self.clickGenerate) + rollButton.place(x=155,y=225) + + resetButton = Button(self, text="Reset", command=self.clickReset) + resetButton.place(x=75,y=225) + + # Define Functions + + # Exit the program + def clickExit(self): + exit() + + # Interger entry error popup + def intErr(self): + print("Oops!") + tkinter.messagebox.showerror('tRandom - Error','Make sure you only enter whole numbers between 0 and 999.') + + # Software version informational popup + def clickVersion(self): + tkinter.messagebox.showinfo('tRandom - Version', 'v0.4.2\n(C) Fred Boniface 2020') + + # About informational popup + def clickAbout(self): + tkinter.messagebox.showinfo('tRandom - About', 'An easy to use psuedo-random number generator written in Python 3.\n\nFor more information visit:\nhttps://tRandom.fjla.uk/') + + # License informational popup + def clickLic(self): + tkinter.messagebox.showinfo('tRandom - License', 'tRandom is licensed under the GPLv3. A copy of this license is included with the software, for more information visit:\nhttps://tRandom.fjla.uk/') + + # Reset function. + def clickReset(self): + self.prevResults.clear() + self.prevResults = [" ", " ", " ", " "," ", " ", " ", " "] + self.l2.config(text="") + self.past1.config(text="") + self.past2.config(text="") + self.past3.config(text="") + self.past4.config(text="") + self.past5.config(text="") + self.past6.config(text="") + self.past7.config(text="") + self.past8.config(text="") + + # Generate function. + def clickGenerate(self): + + # Get strings from entry box + lowStr = self.in1.get() + highStr = self.in2.get() + print("Low: " + lowStr) + print("High: " + highStr) + + # Try to convert strings to intergers or show error box + try: + lowInt = int(lowStr) + highInt = int(highStr) + highInt += 1 + except: + self.intErr() + + # Check that the intergers are within range + if highInt > 1000: + self.intErr() + elif lowInt < 0: + self.intErr() + else: + + # Generate the random number and print to console + result = random.randrange(lowInt,highInt) + print("Result:") + print(result) + + # Append to prevResults print list to console + self.prevResults.append(result) + print(self.prevResults) + + # Print result and prevResults to interface + self.l2.config(text=result) + self.past1.config(text=self.prevResults[-1]) + self.past2.config(text=self.prevResults[-2]) + self.past3.config(text=self.prevResults[-3]) + self.past4.config(text=self.prevResults[-4]) + self.past5.config(text=self.prevResults[-5]) + self.past6.config(text=self.prevResults[-6]) + self.past7.config(text=self.prevResults[-7]) + self.past8.config(text=self.prevResults[-8]) + +# Main +root = Tk() +app = Window(root) +root.iconphoto(False, PhotoImage(file='./icon.png')) +root.wm_title("tRandom") +root.geometry("250x260") +root.maxsize(250,295) +root.minsize(250,295) +root.mainloop()