如何在TKInter中相互重叠创建3个椭圆

时间:2017-07-17 01:21:33

标签: python-3.x tkinter tkinter-canvas

我需要创建一个停止灯模拟,但不能在我的生活中使圆圈相互重叠。网格是从左上角开始的吗? X和Y轴似乎没有像我期望的那样。

    from tkinter import *

    class TrafficLights:

    def __init__(self):

        window = Tk()
        window.title("Traffic Light")

        frame = Frame(window)
        frame.pack()

        self.color = StringVar()

        #Create Button options and corresponding colors

        #Red
        radio_red = Radiobutton(frame, text="Red", bg="red", variable=self.color, value="R", command=self.checkSelect)
        radio_red.grid(row=10, column=1)

        #Yellow
        radio_yellow = Radiobutton(frame, text="Yellow", bg="yellow", variable=self.color, value="Y", command=self.checkSelect)               
        radio_yellow.grid(row = 20, column = 1)

        #Green
        radio_green = Radiobutton(frame, text="Green", bg="green", variable=self.color, value="G", command=self.checkSelect)
        radio_green.grid(row = 30, column = 1)

        #Create canvas window and rectange for light
        self.canvas = Canvas(window, width=300, height=400, bg="white")
        self.canvas.create_rectangle(10,10,110,400)
        self.canvas.pack()





        #I cant seem to get the yellow and green where I need it.
        #Where is the center of the grid?

        self.oval_red = self.canvas.create_oval(10, 10, 110, 110, fill="white")

        self.oval_yellow = self.canvas.create_oval(100, 110, 310, 400, fill="white")

        self.oval_green = self.canvas.create_oval(230, -10, 330, 110, fill="white")


        self.color.set("R")
        self.canvas.itemconfig(self.oval_red, fill="white")

        window.mainloop()

    def checkSelect(self):
        color = self.color.get()



        if color == "R":
            self.canvas.itemconfig(self.oval_red, fill="red")
            self.canvas.itemconfig(self.oval_yellow, fill="white")
            self.canvas.itemconfig(self.oval_green, fill="white")
        elif color == "Y":
            self.canvas.itemconfig(self.oval_red, fill="white")
            self.canvas.itemconfig(self.oval_yellow, fill="yellow")
            self.canvas.itemconfig(self.oval_green, fill="white")
        elif color == "G":
            self.canvas.itemconfig(self.oval_red, fill="white")
            self.canvas.itemconfig(self.oval_yellow, fill="white")
            self.canvas.itemconfig(self.oval_green, fill="green")


TrafficLights()

1 个答案:

答案 0 :(得分:1)

我能够确定TKinter使用不同的坐标系。它使用传统坐标系的右下侧。一旦我弄明白,我就能找到合适的坐标。