Настройка элемента холста tkinter

1

Я пытаюсь сделать объект кости, и я хочу иметь возможность контролировать цвета пипов. Я создал пипсы с черным заполнением, и я попытался изменить один на красный, используя

self.canvas.itemconfigure(self.pip1, fill='red') 

но, похоже, это не имеет никакого эффекта. Ошибок нет, поэтому мне интересно, почему изменения не появляются.

Минимальный рабочий пример:

from tkinter import *
from tkinter import ttk

class Dice:
    #the x and y instancing variables are for the x and y coordinates of the top left corner of the rectangle
    def __init__(self, win, x, y):
        self.win = win
        self.win.geometry("500x500")
        self.canvas = Canvas(self.win)
        self.canvas.place(x=0, y=0)

        die = self.canvas.create_rectangle(x, y, x+88, y+88, fill='white', width=1)
        offset = 20

        #create 7 circles for pip locations:

        self.pip1 = self.pips(x+offset, y+offset)
        self.pip2 = self.pips(x+offset, y+2*offset)
        self.pip3 = self.pips(x+offset, y+3*offset)
        self.pip4 = self.pips(x+2*offset, y+2*offset)
        self.pip5 = self.pips(x+3*offset, y+offset)
        self.pip6 = self.pips(x+3*offset, y+2*offset)
        self.pip7 = self.pips(x+3*offset, y+3*offset)

        self.canvas.itemconfigure(self.pip1, fill='red')

    def pips(self, x, y):
        pip = self.canvas.create_oval(x, y, x+9, y+9, fill='black', width=0)

    #def setValue(self, value)

    #def pipsOff(self, pip):



def test():
    x = Dice(Tk(), 50, 50)
    mainloop()
Теги:
tkinter
tkinter-canvas

1 ответ

1
Лучший ответ

Первое правило отладки: проверьте свои данные. Если вы поместите выражение печати или остановите отладчик непосредственно перед вызовом itemconfigure, вы увидите, что self.pip1 имеет значение None. Итак, первое, о чем вы должны спросить себя: "почему это None?"

Причина, по которой это None, заключается в том, что вы создаете ее в методе, но пренебрегаете возвратом идентификатора элемента. Итак, исправление вашей проблемы состоит в том, чтобы добавить return pip в конец функции pips:

def pips(self, x, y):
    pip = self.canvas.create_oval(x, y, x+9, y+9, fill='black', width=0)
    return pip
  • 0
    Да ... это делает трюк. Но что я не понимаю, так это то, что даже без оператора return в функции pips оригинальные черные точки по-прежнему рисовались. Можете ли вы объяснить, почему это может быть?
  • 0
    @ sq1020: это потому, что функция создала пипсы просто отлично. Вы просто не возвращали их имя вызывающей функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню