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()
4

1 に答える 1

1

デバッグの最初のルール: データを調べます。への呼び出しの直前に print ステートメントを配置するか、デバッガーを停止するとitemconfigureself.pip1の値がNone. ですから、まず「なぜそうなのNoneか」を自問する必要があります。

その理由はNone、メソッドで作成するが、アイテム ID を返すことを怠っているからです。したがって、問題の修正は、関​​数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
于 2011-05-30T19:03:31.077 に答える