I'm enrolled in a coding class at the moment and part of it involves using the Tkinter function of Python. Our assignment was to create a script that would show an "earth" rotating the "Sun". Really all this does is utilize basic geometric shapes and trigonometry (which was a pain in the butt to get to work), and as far as I can tell, my code should be working, but for whatever reason, it's continuing to ignore my if/elif statements. I get the feeling my confusion is due to some lack of experience and understanding, but I was hoping someone could lend me a hand in figuring out what I'm doing wrong with this. Thank you for reading. ^-^
#import Tkinter package responsible for constructing a
# graphical user interface, GUI
import Tkinter
#from Tkinter, import Canvas Class, which allows us to draw on the GUI
from Tkinter import Canvas, NW, Scale, HORIZONTAL
from math import cos, sin, radians
#create a child object called root. This object is our window. Tk() is
#the class constructor to instantiate the window
root = Tkinter.Tk()
#call the method title passing in the title of our window
root.title("Earth Orbit")
#create a child object called canvas. This object is our canvas for
#drawing. We instantiate from the Canvas class, calling the constructor and
#passing in the parent of our canvas, and defining the dimenstions
canvas = Canvas(root,width=600,height=600,bg="white")
#call the grid method so that whatever we place on the canvas will be visible
canvas.grid()
color = canvas.create_polygon(0, 0, 0, 600, 600, 600, 600, 0, fill=
"light blue")
season = canvas.create_text(50,100,text="Winter", anchor=NW)
#intial coordinates for our circle
xpos = 275
ypos = 25
Earth = canvas.create_oval(xpos, ypos, xpos+25, ypos+25, fill="blue", outline="cyan")
x = cos(radians(0))
y = sin(radians(0))
Sun = canvas.create_oval(200, 200, 400, 400, fill="orange", outline="yellow")
def changeCirclePosition(event):
x = 300 + (200*cos(radians(rectSlider.get())))
y = 300 + (200*-sin(radians(rectSlider.get())))
canvas.coords(Earth, x, y, x+25, y+25)
rectSlider = Scale(root,from_=0, to=360,orient=HORIZONTAL,label='Change Position',command=changeCirclePosition)
canvas.create_window(250,500, anchor=NW, window=rectSlider)
if 0<= rectSlider < 90:
canvas.itemconfigure(color, fill="green")
canvas.itemconfigure(season,text="Spring")
elif 90<=rectSlider < 180:
canvas.itemconfigure(color, fill="yellow")
canvas.itemconfigure(season,text="Summer")
elif 180 <= rectSlider < 270:
canvas.itemconfigure(color, fill="orange")
canvas.itemconfigure(season,text="Autumn")
elif 270 <= rectSlider < 360:
canvas.itemconfigure(color, fill="light blue")
canvas.itemconfigure(season,text="Winter")
canvas.focus_set()
root.mainloop()
You have to put those comparisons inside the callback. Also, you can't compare the Scale itself to an integer, you have to get its value, as you did for x and y:
def changeCirclePosition(event):
x = 300 + (200*cos(radians(rectSlider.get())))
y = 300 + (200*-sin(radians(rectSlider.get())))
canvas.coords(Earth, x, y, x+25, y+25)
if 0<= rectSlider.get() < 90:
canvas.itemconfigure(color, fill="green")
canvas.itemconfigure(season,text="Spring")
elif ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With