├── .DS_Store ├── .gitignore ├── Learn_Command_Line └── hello_world.py ├── Learn_Python ├── tuples.py └── weather_api.py ├── OOP ├── .DS_Store ├── Age_Calculator_APP │ ├── add_tkinter_image.py │ ├── add_tkinter_text.py │ ├── age_calculator_app.py │ ├── connect_entries_with_button.py │ └── person_class.py ├── awesome_dates.py ├── bank_account.py ├── bookmark_app.py ├── buttons.py ├── class_vs_instance_variables.py ├── classes_vs_objects.py ├── deep_dive_tkinter │ ├── many_widget_example.py │ ├── pack_geometry_manager.py │ └── root_example.py ├── event_handler.py ├── inheritance.py ├── init.py ├── intro_tkinter.py ├── invoice_app │ └── invoice_app.py ├── labels.py ├── methods.py ├── polymorphism.py ├── string_representation.py └── student_examples │ ├── street_fighter.py │ └── workers.py ├── README.md └── hello_world.py /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleverProgrammer/cleverprogrammer_stuff/35f5a90960263b6884ed55ee7fc6f5f708abbbd6/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Python template 3 | # Byte-compiled / optimized / DLL files 4 | __pycache__/ 5 | *.py[cod] 6 | *$py.class 7 | 8 | # C extensions 9 | *.so 10 | 11 | # Distribution / packaging 12 | .Python 13 | env/ 14 | build/ 15 | develop-eggs/ 16 | dist/ 17 | downloads/ 18 | eggs/ 19 | .eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .coverage 43 | .coverage.* 44 | .cache 45 | nosetests.xml 46 | coverage.xml 47 | *,cover 48 | .hypothesis/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | 58 | # Flask stuff: 59 | instance/ 60 | .webassets-cache 61 | 62 | # Scrapy stuff: 63 | .scrapy 64 | 65 | # Sphinx documentation 66 | docs/_build/ 67 | 68 | # PyBuilder 69 | target/ 70 | 71 | # IPython Notebook 72 | .ipynb_checkpoints 73 | 74 | # pyenv 75 | .python-version 76 | 77 | # celery beat schedule file 78 | celerybeat-schedule 79 | 80 | # dotenv 81 | .env 82 | 83 | # virtualenv 84 | venv/ 85 | ENV/ 86 | 87 | # Spyder project settings 88 | .spyderproject 89 | 90 | # Rope project settings 91 | .ropeproject 92 | 93 | -------------------------------------------------------------------------------- /Learn_Command_Line/hello_world.py: -------------------------------------------------------------------------------- 1 | print("Hello Hi!") 2 | 3 | 4 | for i in range(20): 5 | print(i) 6 | 7 | print("DONE!") 8 | 9 | print("MORE CODE") -------------------------------------------------------------------------------- /Learn_Python/tuples.py: -------------------------------------------------------------------------------- 1 | groceries = ['apricot', 'banana', 'apple'] 2 | 3 | social_security_numbers = ('45645654', '234972348', '643785653874') # tuple 4 | 5 | groceries.append('cheese') 6 | print(groceries) 7 | -------------------------------------------------------------------------------- /Learn_Python/weather_api.py: -------------------------------------------------------------------------------- 1 | from pprint import pprint 2 | import requests 3 | 4 | 5 | r = requests.get('http://api.openweathermap.org/data/2.5/weather?q=Chicago&APPID=289d79262f138bd6ebb226285fd277e3') 6 | 7 | #print(r.json()) 8 | # pprint(r.json()) 9 | 10 | 11 | print(r.json()['base']) -------------------------------------------------------------------------------- /OOP/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleverProgrammer/cleverprogrammer_stuff/35f5a90960263b6884ed55ee7fc6f5f708abbbd6/OOP/.DS_Store -------------------------------------------------------------------------------- /OOP/Age_Calculator_APP/add_tkinter_image.py: -------------------------------------------------------------------------------- 1 | from PIL import Image, ImageTk 2 | import datetime 3 | import tkinter as tk 4 | 5 | # create frame 6 | window = tk.Tk() 7 | 8 | # create frame geometry 9 | window.geometry("400x400") 10 | 11 | # set the title of the frame 12 | window.title("Age Calculator APP!") 13 | 14 | # adding labels 15 | year_label = tk.Label(text="Year") 16 | year_label.grid(column=0, row=1) 17 | 18 | month_label = tk.Label(text="Month") 19 | month_label.grid(column=0, row=2) 20 | 21 | day_label = tk.Label(text="Day") 22 | day_label.grid(column=0, row=3) 23 | 24 | year_entry = tk.Entry() 25 | year_entry.grid(column=1, row=1) 26 | 27 | month_entry = tk.Entry() 28 | month_entry.grid(column=1, row=2) 29 | 30 | day_entry = tk.Entry() 31 | day_entry.grid(column=1, row=3) 32 | 33 | 34 | def calculate_age(): 35 | print(year_entry.get()) 36 | print(month_entry.get()) 37 | print(day_entry.get()) 38 | person = Person('Qazi', datetime.date(int(year_entry.get()), 39 | int(month_entry.get()), 40 | int(day_entry.get()))) 41 | print(person.age()) 42 | text_answer = tk.Text(master=window, height=20, width=30) 43 | text_answer.grid(column=1, row=5) 44 | answer_text = "{name} is {age} years old".format(name=person.name, age=person.age()) 45 | text_answer.insert(tk.END, answer_text) 46 | 47 | 48 | calculate_button = tk.Button(text="Calculate Now!", command=calculate_age) 49 | calculate_button.grid(column=1, row=4) 50 | 51 | 52 | class Person: 53 | def __init__(self, name, birthdate): 54 | self.name = name 55 | self.birthdate = birthdate 56 | 57 | def age(self): 58 | today = datetime.date.today() 59 | age = today.year - self.birthdate.year 60 | return age 61 | 62 | 63 | image = Image.open('/Users/ChessTastic/Documents/Clever Programmer/Brand/Pictures/cp_website_coding.jpg') 64 | image.thumbnail((100, 100), Image.ANTIALIAS) 65 | photo = ImageTk.PhotoImage(image) 66 | label_image = tk.Label(image=photo) 67 | label_image.grid(column=1, row=0) 68 | # qazi = Person('Qazi', datetime.date(1940, 8, 20)) 69 | # print(qazi.name) 70 | # print(qazi.birthdate) 71 | # print(qazi.age()) 72 | 73 | window.mainloop() 74 | -------------------------------------------------------------------------------- /OOP/Age_Calculator_APP/add_tkinter_text.py: -------------------------------------------------------------------------------- 1 | from PIL import Image, ImageTk 2 | import datetime 3 | import tkinter as tk 4 | 5 | # create frame 6 | window = tk.Tk() 7 | 8 | # create frame geometry 9 | window.geometry("400x400") 10 | 11 | # set the title of the frame 12 | window.title("Age Calculator APP!") 13 | 14 | # adding labels 15 | year_label = tk.Label(text="Year") 16 | year_label.grid(column=0, row=1) 17 | 18 | month_label = tk.Label(text="Month") 19 | month_label.grid(column=0, row=2) 20 | 21 | day_label = tk.Label(text="Day") 22 | day_label.grid(column=0, row=3) 23 | 24 | year_entry = tk.Entry() 25 | year_entry.grid(column=1, row=1) 26 | 27 | month_entry = tk.Entry() 28 | month_entry.grid(column=1, row=2) 29 | 30 | day_entry = tk.Entry() 31 | day_entry.grid(column=1, row=3) 32 | 33 | 34 | def calculate_age(): 35 | print(year_entry.get()) 36 | print(month_entry.get()) 37 | print(day_entry.get()) 38 | person = Person('Qazi', datetime.date(int(year_entry.get()), 39 | int(month_entry.get()), 40 | int(day_entry.get()))) 41 | print(person.age()) 42 | text_answer = tk.Text(master=window, height=20, width=30) 43 | text_answer.grid(column=1, row=5) 44 | answer_text = "{name} is {age} years old".format(name=person.name, age=person.age()) 45 | text_answer.insert(tk.END, answer_text) 46 | 47 | 48 | calculate_button = tk.Button(text="Calculate Now!", command=calculate_age) 49 | calculate_button.grid(column=1, row=4) 50 | 51 | 52 | class Person: 53 | def __init__(self, name, birthdate): 54 | self.name = name 55 | self.birthdate = birthdate 56 | 57 | def age(self): 58 | today = datetime.date.today() 59 | age = today.year - self.birthdate.year 60 | return age 61 | 62 | 63 | # qazi = Person('Qazi', datetime.date(1940, 8, 20)) 64 | # print(qazi.name) 65 | # print(qazi.birthdate) 66 | # print(qazi.age()) 67 | 68 | window.mainloop() 69 | -------------------------------------------------------------------------------- /OOP/Age_Calculator_APP/age_calculator_app.py: -------------------------------------------------------------------------------- 1 | from PIL import Image, ImageTk 2 | import datetime # we will use this for date objects 3 | import tkinter as tk 4 | 5 | window = tk.Tk() 6 | window.title("Age Calculator APP") 7 | 8 | window.geometry('400x400') 9 | 10 | 11 | class Person: 12 | def __init__(self, name, birthdate): 13 | self.name = name 14 | self.birthdate = birthdate 15 | 16 | def age(self): 17 | today = datetime.date.today() 18 | age = today.year - self.birthdate.year 19 | 20 | return age 21 | 22 | 23 | year_label = tk.Label(text="Year") 24 | year_label.grid(column=0, row=1) 25 | 26 | month_label = tk.Label(text="Month") 27 | month_label.grid(column=0, row=2) 28 | 29 | day_label = tk.Label(text="Day") 30 | day_label.grid(column=0, row=3) 31 | 32 | birth_year = tk.Entry(master=window) 33 | birth_year.grid(column=1, row=1) 34 | 35 | birth_month = tk.Entry(master=window) 36 | birth_month.grid(column=1, row=2) 37 | 38 | birth_day = tk.Entry(master=window) 39 | birth_day.grid(column=1, row=3) 40 | 41 | 42 | def calculate_age(): 43 | print(birth_year.get()) 44 | print(birth_month.get()) 45 | print(birth_day.get()) 46 | qazi = Person('Qazi', datetime.date(int(birth_year.get()), 47 | int(birth_month.get()), 48 | int(birth_day.get()))) 49 | print(qazi.age()) 50 | text_answer = tk.Text(master=window, height=20, width=30) 51 | text_answer.grid(column=1, row=5) 52 | answer_text = "You are {age} years old!".format(age=qazi.age()) 53 | text_answer.insert(tk.END, answer_text) 54 | text_answer.tag_configure('bold_italics', font=('Helvetica', 12, 'bold', 'italic')) 55 | 56 | 57 | button1 = tk.Button(text="Calculate Now!", command=calculate_age) 58 | button1.grid(column=1, row=4) 59 | 60 | image = Image.open('/Users/ChessTastic/Documents/Clever Programmer/Brand/Pictures/cp_website_coding.jpg') 61 | image.thumbnail((100, 100), Image.ANTIALIAS) 62 | photo = ImageTk.PhotoImage(image) 63 | label_image = tk.Label(image=photo) 64 | label_image.grid(column=1, row=0) 65 | 66 | window.mainloop() 67 | -------------------------------------------------------------------------------- /OOP/Age_Calculator_APP/connect_entries_with_button.py: -------------------------------------------------------------------------------- 1 | # create a class called Person 2 | # create init method 3 | # 2 attributes (name, and birthdate) 4 | # create an object from the Person class 5 | 6 | import datetime 7 | import tkinter as tk 8 | 9 | # create frame 10 | window = tk.Tk() 11 | 12 | # create frame geometry 13 | window.geometry("400x400") 14 | 15 | # set the title of the frame 16 | window.title("Age Calculator APP!") 17 | 18 | # adding labels 19 | year_label = tk.Label(text="Year") 20 | year_label.grid(column=0, row=1) 21 | 22 | month_label = tk.Label(text="Month") 23 | month_label.grid(column=0, row=2) 24 | 25 | day_label = tk.Label(text="Day") 26 | day_label.grid(column=0, row=3) 27 | 28 | year_entry = tk.Entry() 29 | year_entry.grid(column=1, row=1) 30 | 31 | month_entry = tk.Entry() 32 | month_entry.grid(column=1, row=2) 33 | 34 | day_entry = tk.Entry() 35 | day_entry.grid(column=1, row=3) 36 | 37 | 38 | def calculate_age(): 39 | print(year_entry.get()) 40 | print(month_entry.get()) 41 | print(day_entry.get()) 42 | qazi = Person('Qazi', datetime.date(int(year_entry.get()), 43 | int(month_entry.get()), 44 | int(day_entry.get()))) 45 | print(qazi.age()) 46 | print("Button was clicked!") 47 | 48 | 49 | calculate_button = tk.Button(text="Calculate Now!", command=calculate_age) 50 | calculate_button.grid(column=1, row=4) 51 | 52 | 53 | class Person: 54 | def __init__(self, name, birthdate): 55 | self.name = name 56 | self.birthdate = birthdate 57 | 58 | def age(self): 59 | today = datetime.date.today() 60 | age = today.year - self.birthdate.year 61 | return age 62 | 63 | 64 | # qazi = Person('Qazi', datetime.date(1940, 8, 20)) 65 | # print(qazi.name) 66 | # print(qazi.birthdate) 67 | # print(qazi.age()) 68 | 69 | window.mainloop() 70 | -------------------------------------------------------------------------------- /OOP/Age_Calculator_APP/person_class.py: -------------------------------------------------------------------------------- 1 | # create a class called Person 2 | # create init method 3 | # 2 attributes (name, and birthdate) 4 | # create an object from the Person class 5 | 6 | import datetime 7 | import tkinter as tk 8 | 9 | # create frame 10 | window = tk.Tk() 11 | 12 | # create frame geometry 13 | window.geometry("400x400") 14 | 15 | # set the title of the frame 16 | window.title("Age Calculator APP!") 17 | 18 | # adding labels 19 | year_label = tk.Label(text="Year") 20 | year_label.grid(column=0, row=1) 21 | 22 | month_label = tk.Label(text="Month") 23 | month_label.grid(column=0, row=2) 24 | 25 | day_label = tk.Label(text="Day") 26 | day_label.grid(column=0, row=3) 27 | 28 | year_entry = tk.Entry() 29 | year_entry.grid(column=1, row=1) 30 | 31 | month_entry = tk.Entry() 32 | month_entry.grid(column=1, row=2) 33 | 34 | day_entry = tk.Entry() 35 | day_entry.grid(column=1, row=3) 36 | 37 | def calculate_age(): 38 | print("Button was clicked!") 39 | 40 | calculate_button = tk.Button(text="Calculate Now!", command=calculate_age) 41 | calculate_button.grid(column=1, row=4) 42 | 43 | 44 | class Person: 45 | def __init__(self, name, birthdate): 46 | self.name = name 47 | self.birthdate = birthdate 48 | 49 | def age(self): 50 | today = datetime.date.today() 51 | age = today.year - self.birthdate.year 52 | return age 53 | 54 | 55 | qazi = Person('Qazi', datetime.date(1940, 8, 20)) 56 | # print(qazi.name) 57 | # print(qazi.birthdate) 58 | # print(qazi.age()) 59 | 60 | window.mainloop() -------------------------------------------------------------------------------- /OOP/awesome_dates.py: -------------------------------------------------------------------------------- 1 | # http://effbot.org/librarybook/datetime.htm 2 | 3 | 4 | import datetime 5 | 6 | now = datetime.date(2015, 7, 14) 7 | 8 | print(datetime.date.today().year) 9 | -------------------------------------------------------------------------------- /OOP/bank_account.py: -------------------------------------------------------------------------------- 1 | class BankAccount: 2 | def __init__(self, account_type, amount): 3 | self.account_type = account_type 4 | self.amount = amount 5 | 6 | def deposit(self, deposit_amount): 7 | self.amount += deposit_amount 8 | 9 | def withdraw(self, withdraw_amount): 10 | self.amount -= withdraw_amount 11 | 12 | def __str__(self): 13 | return "{} Amount: {}".format(self.account_type, self.amount) 14 | 15 | 16 | qazi = BankAccount("Checkings", 100) 17 | print(qazi.account_type) 18 | print(qazi.amount) 19 | 20 | qazi.deposit(30) 21 | print(qazi.amount) 22 | 23 | qazi.withdraw(45) 24 | print(qazi) 25 | print(qazi.amount) 26 | -------------------------------------------------------------------------------- /OOP/bookmark_app.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | import webbrowser 3 | 4 | URL = 'https://cleverprogrammer.com' 5 | 6 | 7 | # Event handler function 8 | def doorbell(event): 9 | print("You rang the doorbell!!") 10 | 11 | 12 | def open_cp(event): 13 | webbrowser.open_new_tab(URL) 14 | 15 | 16 | def cp_blog(event): 17 | webbrowser.open_new_tab(URL + "/blog") 18 | 19 | 20 | window = tk.Tk() 21 | window.geometry("300x200") 22 | 23 | alabel = tk.Label(text="Banana") 24 | alabel.grid(column=0, row=0) 25 | 26 | blabel = tk.Label(text="Home") 27 | blabel.grid(column=1, row=0) 28 | 29 | clabel = tk.Label(text="Blog") 30 | clabel.grid(column=2, row=0) 31 | 32 | button = tk.Button(window, text="Doorbell") 33 | button.grid(column=0) 34 | 35 | button2 = tk.Button(window, text="Clever Programmer") 36 | button2.grid(column=1, row=1) 37 | 38 | button3 = tk.Button(window, text="CP Blog") 39 | button3.grid(column=2, row=1) 40 | 41 | button.bind("", doorbell) 42 | button2.bind("", open_cp) 43 | button3.bind("", cp_blog) 44 | 45 | window.mainloop() 46 | -------------------------------------------------------------------------------- /OOP/buttons.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | 3 | window = tk.Tk() 4 | window.geometry("300x200") 5 | 6 | alabel = tk.Label(text="Banana") 7 | alabel.grid(column=0, row=0) 8 | 9 | blabel = tk.Label(text="Apple") 10 | blabel.grid(column=1, row=0) 11 | 12 | button = tk.Button(text="5") 13 | button.grid(column=0) 14 | 15 | button2 = tk.Button(text="10") 16 | button2.grid(column=1, row=1) 17 | 18 | window.mainloop() 19 | -------------------------------------------------------------------------------- /OOP/class_vs_instance_variables.py: -------------------------------------------------------------------------------- 1 | class BestCourse: 2 | website = "http://cleverprogrammer.com" 3 | 4 | def __init__(self, name): 5 | self.name = name 6 | 7 | 8 | python_course = BestCourse("Learn Python") 9 | learn_command_line_course = BestCourse("Learn Command Line") 10 | 11 | print(python_course.name) 12 | print(BestCourse.website) 13 | 14 | print(learn_command_line_course.name) # OBJECT_NAME.METHOD 15 | print(BestCourse.website) # CLASS_NAME.METHOD 16 | -------------------------------------------------------------------------------- /OOP/classes_vs_objects.py: -------------------------------------------------------------------------------- 1 | class Fighters: 2 | def __init__(self, name): 3 | self.name = name 4 | 5 | qazi = Fighters("Qazi") 6 | bob = Fighters("Cat") 7 | 8 | print(qazi.name) 9 | print(bob.name) 10 | -------------------------------------------------------------------------------- /OOP/deep_dive_tkinter/many_widget_example.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | 3 | parent = tk.Tk() 4 | 5 | # tk.WidgetName(parent_frame, options) 6 | 7 | tk.Entry(parent, width=25).pack() 8 | tk.Button(parent, text="LOOKOUT!").pack() 9 | tk.Checkbutton(parent, text='RememberMe', variable=tk.IntVar()).pack() 10 | tk.Label(parent, text="What's Your Name?").pack() 11 | tk.OptionMenu(parent, tk.IntVar(), "Select Age", "15+", "25+", "40+", "60+").pack() 12 | tk.Scrollbar(parent, orient=tk.VERTICAL).pack() 13 | tk.Radiobutton(parent, text='Democratic', variable=tk.IntVar(), value=3).pack() 14 | tk.Radiobutton(parent, text='Republican', variable=tk.IntVar(), value=5).pack() 15 | 16 | 17 | parent.mainloop() 18 | -------------------------------------------------------------------------------- /OOP/deep_dive_tkinter/pack_geometry_manager.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | 3 | root = tk.Tk() 4 | label1 = tk.Label(root, text='BANANA') 5 | button1 = tk.Button(root, text='Button!') 6 | label1.pack() 7 | button1.pack() 8 | 9 | root.mainloop() 10 | -------------------------------------------------------------------------------- /OOP/deep_dive_tkinter/root_example.py: -------------------------------------------------------------------------------- 1 | # create root window 2 | # TCL -- Tools Command Line 3 | import tkinter as tk 4 | 5 | root = tk.Tk() 6 | root.mainloop() 7 | -------------------------------------------------------------------------------- /OOP/event_handler.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | 3 | 4 | # Event handler function 5 | def doorbell(event): 6 | print("You rang the doorbell!!") 7 | 8 | 9 | window = tk.Tk() 10 | window.geometry("300x200") 11 | 12 | alabel = tk.Label(text="Banana") 13 | alabel.grid(column=0, row=0) 14 | 15 | blabel = tk.Label(text="Apple") 16 | blabel.grid(column=1, row=0) 17 | 18 | button = tk.Button(window, text="Doorbell") 19 | button.grid(column=0) 20 | 21 | button2 = tk.Button(window, text="10") 22 | button2.grid(column=1, row=1) 23 | 24 | button.bind("", doorbell) 25 | 26 | window.mainloop() 27 | -------------------------------------------------------------------------------- /OOP/inheritance.py: -------------------------------------------------------------------------------- 1 | class Fighter: 2 | def __init__(self, name): 3 | self.name = name 4 | self.health = 100 5 | self.damage = 10 6 | 7 | def attack(self, other_guy): 8 | other_guy.health = other_guy.health - self.damage 9 | print("{} attacks {}!".format(self.name, other_guy.name)) 10 | print("{} loses {} health points!".format(other_guy.name, self.damage)) 11 | 12 | def __str__(self): 13 | return "{}: {}".format(self.name, self.health) 14 | 15 | qazi = Fighter("Qazi") 16 | you = Fighter("Matt") 17 | 18 | print(qazi) # Qazi: 100 19 | print(you) 20 | 21 | you.attack(qazi) 22 | print(qazi) 23 | 24 | class Boxer(Fighter): 25 | def heal(self): 26 | self.health += 10 27 | 28 | 29 | boxer_qazi = Boxer("Boxer Qazi") 30 | print(boxer_qazi) 31 | print(boxer_qazi.damage) 32 | print(boxer_qazi.health) 33 | 34 | boxer_qazi.heal() 35 | 36 | print(boxer_qazi) 37 | -------------------------------------------------------------------------------- /OOP/init.py: -------------------------------------------------------------------------------- 1 | class Student: 2 | 3 | def __init__(self, name, grade, age): 4 | self.name = name 5 | self.grade = grade 6 | self.age = age 7 | 8 | 9 | kitty = Student('Kitty', 85, 30) 10 | daniel = Student('Daniel', 80, 15) 11 | 12 | print(kitty.name) 13 | print(daniel.name) 14 | 15 | print(kitty.grade) 16 | print(daniel.grade) 17 | 18 | print(kitty.age) 19 | print(daniel.age) -------------------------------------------------------------------------------- /OOP/intro_tkinter.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | 3 | window = tk.Tk() 4 | window.geometry("300x200") 5 | 6 | window.mainloop() 7 | -------------------------------------------------------------------------------- /OOP/invoice_app/invoice_app.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | from tkinter import filedialog 3 | 4 | window = tk.Tk() 5 | window.geometry('800x600') 6 | window.title('Invoice APP') 7 | frame_1 = tk.Frame(master=window, width=300, height=300) 8 | 9 | # Let's create the menu 10 | menubar = tk.Menu(window) 11 | file_menu = tk.Menu(menubar, tearoff=0) # this will be our file menu 12 | 13 | menubar.add_cascade(label='File', menu=file_menu) 14 | 15 | 16 | def cp_print_cp(): 17 | print('Clever Programmer!') 18 | 19 | 20 | def file_save(event=None): 21 | # a+ --> add stuff to the end of the file you are writing to 22 | f = filedialog.asksaveasfile(mode='a+', defaultextension='.txt') 23 | 24 | if f is None: 25 | return 26 | 27 | # lesson_details_to_save = str('\n' + str((subject_entry.get(), hours_entry.get(), amount_entry.get()))) 28 | lessons_to_save = notes_text.get(0.0, tk.END) 29 | f.write(lessons_to_save) 30 | f.close() 31 | 32 | 33 | def submit_lesson(event=None): 34 | lesson_details_to_save = '{}, {}, {}\n'.format(subject_entry.get(), hours_entry.get(), amount_entry.get()) 35 | notes_text.insert(tk.END, lesson_details_to_save) 36 | 37 | 38 | file_menu.add_command(label="Save As", accelerator='Ctrl + S', 39 | compound=tk.LEFT, image=None, underline=0, command=file_save) 40 | 41 | window.config(menu=menubar) 42 | 43 | # radio button boolean variable 44 | paid_tick = tk.BooleanVar() 45 | 46 | # Let's make the labels. 47 | subject_label = tk.Label(master=frame_1, text="Lesson Subject") 48 | hours_label = tk.Label(master=frame_1, text="Hours") 49 | amount_label = tk.Label(master=frame_1, text='Amount') 50 | paid_label = tk.Label(master=frame_1, text="Paid") 51 | notes_label = tk.Label(master=frame_1, text='Notes') 52 | 53 | # Let's make the entry fields + RadioButton + Textfield 54 | subject_entry = tk.Entry(master=frame_1) 55 | hours_entry = tk.Entry(master=frame_1) 56 | amount_entry = tk.Entry(master=frame_1) 57 | paid_radio_button = tk.Radiobutton(master=frame_1, text='Yes', variable=paid_tick, value=True) 58 | paid_radio_button2 = tk.Radiobutton(master=frame_1, text='No', variable=paid_tick, value=False) 59 | notes_text = tk.Text(master=frame_1, width=40, height=20) 60 | submit_button = tk.Button(master=frame_1, text="Submit", command=submit_lesson) 61 | 62 | # bind button 63 | window.bind('', submit_lesson) 64 | 65 | # bind save 66 | window.bind('', file_save) 67 | 68 | # Let's put the labels in a GRID geometry manager! 69 | subject_label.grid(row=1, column=0, sticky='w') 70 | hours_label.grid(row=2, column=0, sticky='w') 71 | amount_label.grid(row=3, column=0, sticky='w') 72 | paid_label.grid(row=4, column=0, sticky='w') 73 | notes_label.grid(row=6, column=0, sticky='w') 74 | 75 | # Let's put the entry fields in a GRID geometry manager! 76 | subject_entry.grid(row=1, column=1, sticky='e') 77 | hours_entry.grid(row=2, column=1, sticky='e') 78 | amount_entry.grid(row=3, column=1, sticky='e') 79 | paid_radio_button.grid(row=4, column=1, sticky='w') 80 | paid_radio_button2.grid(row=4, column=2) 81 | submit_button.grid(row=5, column=1) 82 | notes_text.grid(row=6, column=1, sticky='e') 83 | 84 | # Most importantly, GRID the frame 85 | frame_1.grid(row=0, column=0) 86 | 87 | window.mainloop() 88 | -------------------------------------------------------------------------------- /OOP/labels.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | 3 | window = tk.Tk() 4 | window.geometry("300x200") 5 | 6 | alabel = tk.Label(text="Banana") 7 | alabel.grid(column=0, row=0) 8 | 9 | blabel = tk.Label(text="Apple") 10 | blabel.grid(column=1, row=0) 11 | 12 | window.mainloop() 13 | -------------------------------------------------------------------------------- /OOP/methods.py: -------------------------------------------------------------------------------- 1 | class Fighter: 2 | def __init__(self, name): 3 | self.name = name 4 | self.health = 100 5 | self.damage = 10 6 | 7 | def attack(self, other_guy): 8 | other_guy.health = other_guy.health - self.damage 9 | 10 | 11 | qazi = Fighter("Qazi") 12 | you = Fighter("Matt") 13 | 14 | print(qazi.name) 15 | print(you.name) 16 | 17 | you.attack(qazi) 18 | print(qazi.health) 19 | -------------------------------------------------------------------------------- /OOP/polymorphism.py: -------------------------------------------------------------------------------- 1 | class Animal: 2 | def __init__(self, name): 3 | self.name = name 4 | 5 | def talk(self): 6 | pass 7 | 8 | 9 | class Dog(Animal): 10 | def talk(self): 11 | return "WOOF" 12 | 13 | 14 | class Cat(Animal): 15 | def talk(self): 16 | return "Meow" 17 | 18 | 19 | pet_qazi = Animal("Qazoo") 20 | print(pet_qazi.name) 21 | print(pet_qazi.talk()) 22 | 23 | pet = Dog("Dot") 24 | print(pet.name) 25 | print(pet.talk()) 26 | 27 | kitten = Cat("Brian") 28 | print(kitten.name) 29 | print(kitten.talk()) 30 | -------------------------------------------------------------------------------- /OOP/string_representation.py: -------------------------------------------------------------------------------- 1 | class Fighter: 2 | def __init__(self, name): 3 | self.name = name 4 | self.health = 100 5 | self.damage = 10 6 | 7 | def attack(self, other_guy): 8 | other_guy.health = other_guy.health - self.damage 9 | print("{} attacks {}!".format(self.name, other_guy.name)) 10 | print("{} loses {} health points!".format(other_guy.name, self.damage)) 11 | 12 | def __str__(self): 13 | return "{}: {}".format(self.name, self.health) 14 | 15 | qazi = Fighter("Qazi") 16 | you = Fighter("Matt") 17 | 18 | print(qazi) # Qazi: 100 19 | print(you) 20 | 21 | you.attack(qazi) 22 | print(qazi) 23 | -------------------------------------------------------------------------------- /OOP/student_examples/street_fighter.py: -------------------------------------------------------------------------------- 1 | """" 2 | Street Fighter: Ryu punches Ken. 3 | By David, 2017 4 | Rafeh Qazi made it work ;) 5 | """ 6 | 7 | import tkinter as tk 8 | 9 | 10 | class Fighter: 11 | def __init__(self, name): 12 | self.name = name 13 | self.health = 100 14 | self.damage = 10 15 | 16 | # function for one fighter to attack another 17 | def attack(self, other_guy): 18 | # print(dir(event)) 19 | other_guy.health -= self.damage 20 | print("{} attacks {} for {} damage, ouch that's gotta hurt!".format(self.name, other_guy.name, self.damage)) 21 | 22 | 23 | ryu = Fighter('Ryu') 24 | ken = Fighter('Ken') 25 | 26 | window = tk.Tk() 27 | window.geometry("500x500") 28 | window.bind("", ) 29 | 30 | ryu_label = tk.Label(text="Ryu") 31 | ryu_label.grid(column=0, row=0) 32 | 33 | 34 | def button1_callback(event=None): 35 | ryu.attack(ken) 36 | 37 | 38 | ryu_attack_button = tk.Button(text="Attack", command=button1_callback) 39 | ryu_attack_button.grid(column=0, row=1) 40 | 41 | # *** shortkeyys are binded to FRAMES and NOT buttons. *** 42 | window.bind("", button1_callback) 43 | 44 | ken_label = tk.Label(text="Ken") 45 | ken_label.grid(column=2, row=0) 46 | 47 | window.mainloop() 48 | -------------------------------------------------------------------------------- /OOP/student_examples/workers.py: -------------------------------------------------------------------------------- 1 | """ 2 | Workers class example. 3 | By Mirsolav, 2017 4 | """ 5 | 6 | 7 | class Workers: # "Workers" is the class name 8 | 9 | def __init__(self, name, age, address, hometown): # "__init__" is the method 10 | self.name = name # ".name" (after "self") is attribute 11 | self.age = age 12 | self.address = address 13 | self.hometown = hometown 14 | 15 | 16 | ivan = Workers('Ivan,', '28 years,', 'Blueberry Street 36,', 'Utopia.') # "ivan" is the object created from the class "Workers" 17 | josip = Workers('Josip,', '36 years,', 'Yellowlight Street 136,', 'Oz.') 18 | miro = Workers('Miro,', '38 years,', 'Color Street 1,', 'Dreamland Town.') 19 | blondie = Workers('Marijana,', '24 years,', 'Strawberry Street 95,', 'Bluetown.') 20 | 21 | print(ivan.name, ivan.age, ivan.address, ivan.hometown) 22 | print(josip.name, josip.age, josip.address, josip.hometown) 23 | print(miro.name, miro.age, miro.address, miro.hometown) 24 | 25 | print(blondie.name, blondie.age, blondie.address, blondie.hometown) 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Clever Programmer 2 | --- 3 | Clever Programmer exercises, notes, solutions, projects... and STUFF! 4 | -------------------------------------------------------------------------------- /hello_world.py: -------------------------------------------------------------------------------- 1 | print("Hello, Clever Programmers!") 2 | --------------------------------------------------------------------------------