Изменение цвета прямоугольника нажатием переключателей (python, ткинтер) - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь создать программу, которая меняет цвет прямоугольника в зависимости от выбранной радиокнопки и создала приведенный ниже код. Однако, когда я нажимаю одну из кнопок, в оболочке появляется сообщение о том, что int не поддерживает присваивание. Я запутался в этой ошибке, так как это тот же метод, который я использовал для изменения цвета метки вместо прямоугольника без ошибок.

from tkinter import *

master = Tk()
master.title('Radio Buttons')

rectangle_colour = IntVar()

canvas = Canvas(master, width=300, height=25)
canvas.pack()

def change_colour():
    if rectangle_colour.get() == 1:
        rect1['fill'] = 'red'
    elif rectangle_colour.get() == 2:
        rect2['fill'] = 'blue'
    elif rectangle_colour.get() == 3:
        rect3['fill'] = 'green'
    elif rectangle_colour.get() == 4:
        rect4['fill'] = 'yellow'
    elif rectangle_colour.get() == 5:
        rect5['fill'] = 'purple'

button1 = Radiobutton(master, text = ' One', variable = rectangle_colour,
                      value = 1, command = change_colour)
button1.pack(side=LEFT)
rect1 = canvas.create_rectangle(0, 0, 50, 25, fill = 'grey')

button2 = Radiobutton(master, text = ' Two', variable = rectangle_colour,
                      value = 2, command = change_colour)
button2.pack(side=LEFT)
rect2 = canvas.create_rectangle(60, 0, 110, 25, fill = 'grey')

button3 = Radiobutton(master, text = ' Three', variable = rectangle_colour,
                      value = 3, command = change_colour)
button3.pack(side=LEFT)
rect3 = canvas.create_rectangle(120, 0, 170, 25, fill = 'grey')

button4 = Radiobutton(master, text = ' Four', variable = rectangle_colour,
                      value = 4, command = change_colour)
button4.pack(side=LEFT)
rect4 = canvas.create_rectangle(180, 0, 230, 25, fill = 'grey')

button5 = Radiobutton(master, text = ' Five', variable = rectangle_colour,
                      value = 5, command = change_colour)
button5.pack(side=LEFT)
rect5 = canvas.create_rectangle(240, 0, 290, 25, fill = 'grey')

master.mainloop()

1 Ответ

0 голосов
/ 26 апреля 2020

Измените функцию change_colour () на:

def change_colour():
    if rectangle_colour.get() == 1:
        canvas.itemconfig(rect1, fill = "red")
    elif rectangle_colour.get() == 2:
        canvas.itemconfig(rect2, fill = "blue")
    elif rectangle_colour.get() == 3:
        canvas.itemconfig(rect3, fill = "green")
    elif rectangle_colour.get() == 4:
        canvas.itemconfig(rect4, fill = "yellow")
    elif rectangle_colour.get() == 5:
        canvas.itemconfig(rect5, fill = "purple")

rect1, rect2, et c. являются просто индексами элементов для холста и не хранят фактический элемент. Элементы холста можно изменить с помощью функции canvas itemconfig ().

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...