I have this pretty ugly program (really cluttered) is there any way I could make it cleaner, less cluttered, etc. Thanks! P.S. (If you want to try to run this program prepare to be amazed.)
from tkinter import * root = Tk() c = Canvas(root, width = 800, height = 600, bg = "teal") c.pack() #ground c.create_rectangle(0, 550, 800, 600, outline = "Green", fill = "Green") #house/roof c.create_rectangle(100, 550, 450, 200, outline = "white", fill = "white") c.create_line(50, 200, 175, 50, width = 10) c.create_line(500, 200, 375, 50, width = 10) c.create_line(165, 50, 385, 50, width = 10) c.create_line(50, 200, 500, 200, width = 10) #door+window c.create_rectangle(150, 550, 260, 300, outline = "Chocolate", fill = "Chocolate") c.create_rectangle(150, 550, 260, 500, outline = 'black', fill = 'grey') c.create_rectangle(150, 515, 260, 535, outline = 'black', fill = 'grey') c.create_rectangle(180, 350, 230, 400, outline = "black", fill = "light blue") c.create_line(205, 350, 205, 400, width = 5) c.create_line(180, 375, 230, 375, width = 4) c.create_rectangle(300, 300, 390, 400, outline = "black", fill = "light blue") c.create_line(345, 300, 345, 400, width = 5) c.create_line(300, 350, 390, 350, width = 4) #stickfigure c.create_line(600, 550, 640, 490, width = 5) c.create_line(685, 550, 645, 490, width = 5) c.create_line(600, 390, 640, 350, width = 5) c.create_line(685, 390, 645, 350, width = 5) c.create_line(643, 350, 643, 495, width = 7) c.create_oval(613, 350, 673, 300, width = 5) #sun c.create_oval(800, 100, 700, 0, width = 5, outline = 'yellow', fill = 'yellow') #trees c.create_line(70, 550, 70, 480, width = 10, fill = "brown") c.create_oval(40, 480, 100, 340, fill = 'green') c.create_line(730, 550, 730, 480, fill = 'brown', width = 10) c.create_oval(700, 480, 760, 340, fill = 'green')
Advertisement
Answer
First of all, nice work with the drawing!
Here is my suggestion:
# Importing only what is needed from tkinter import Tk, Canvas def get_canvas(): root = Tk() canvas = Canvas(root, width=800, height=600, bg="teal") canvas.pack() return canvas # Make funcions to re-use the code def draw_ground(canvas): # Using canvas as an parameter so you can re-use the ground on other drawings canvas.create_rectangle(0, 550, 800, 600, outline="Green", fill="Green") def draw_house_roof(canvas): canvas.create_rectangle(100, 550, 450, 200, outline="white", fill="white") canvas.create_line(50, 200, 175, 50, width=10) canvas.create_line(500, 200, 375, 50, width=10) canvas.create_line(165, 50, 385, 50, width=10) canvas.create_line(50, 200, 500, 200, width=10) def draw_door_window(canvas): canvas.create_rectangle(150, 550, 260, 300, outline="Chocolate", fill="Chocolate") canvas.create_rectangle(150, 550, 260, 500, outline="black", fill="grey") canvas.create_rectangle(150, 515, 260, 535, outline="black", fill="grey") canvas.create_rectangle(180, 350, 230, 400, outline="black", fill="light blue") canvas.create_line(205, 350, 205, 400, width=5) canvas.create_line(180, 375, 230, 375, width=4) canvas.create_rectangle(300, 300, 390, 400, outline="black", fill="light blue") canvas.create_line(345, 300, 345, 400, width=5) canvas.create_line(300, 350, 390, 350, width=4) def draw_stickfigure(canvas): canvas.create_line(600, 550, 640, 490, width=5) canvas.create_line(685, 550, 645, 490, width=5) canvas.create_line(600, 390, 640, 350, width=5) canvas.create_line(685, 390, 645, 350, width=5) canvas.create_line(643, 350, 643, 495, width=7) canvas.create_oval(613, 350, 673, 300, width=5) def draw_sun(canvas): canvas.create_oval(800, 100, 700, 0, width=5, outline="yellow", fill="yellow") def draw_trees(canvas): canvas.create_line(70, 550, 70, 480, width=10, fill="brown") canvas.create_oval(40, 480, 100, 340, fill="green") canvas.create_line(730, 550, 730, 480, fill="brown", width=10) canvas.create_oval(700, 480, 760, 340, fill="green") # Doing this enables you to import these functions in other files # https://stackoverflow.com/questions/419163/what-does-if-name-main-do if __name__ == "__main__": canvas = get_canvas() draw_ground(canvas) draw_house_roof(canvas) draw_door_window(canvas) draw_stickfigure(canvas) draw_sun(canvas) draw_trees(canvas) # Using input to keep the window open. input("Press any key to close the windows:")
Things for you to try next:
- Making the elements size relative to the canvas size
- Formatting the code with black
- Use Docstrings and type hinting to improve readability