矩形的填充颜色保持黑色,但当我设置为红色

2024-09-29 08:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

(摘自我的程序代码)

global pensize
global rect1
try:
    pensize
except:
    pensize = 0
global pencolor
try:
    pencolor
except:
    pencolor = "red"
def callback(event):
    global rect1
    rect1 = canvas.create_rectangle(event.x-pensize, event.y-pensize, event.x+pensize, event.y+pensize, fill="red")
    print(pencolor)
def setpencolor(color):
    global pencolor
    pencolor = color
    global rect1
    canvas.itemconfig(rect1, fill=pencolor)
    print("Pencolor set to"+str(pencolor))

#    --- window properties ---
# --- the canvas ---
canvas= Canvas(root, width=600, height=600)
canvas.bind("<B1-Motion>", callback)
canvas.pack(side = RIGHT)
# --- the menubar ---
menubar = Menu(root)
menubar.add_command(label="Exit", command=root.quit)
#   --- color tool---
colormenu = Menu(menubar, tearoff=0)
colormenu.add_command(label="Black", command=lambda: setpencolor("black"))
colormenu.add_command(label="Red", command=lambda: setpencolor("red"))
colormenu.add_command(label="Blue", command=lambda: setpencolor("blue"))
menubar.add_cascade(label="Color", menu=colormenu)

这是我正在制作的绘图程序的一部分。我想让它,当用户改变颜色时,它不仅改变了钢笔的颜色,而且也改变了他们画的其他所有东西。不过,这些概念都不管用。矩形的填充颜色保持黑色,即使pencolor明显设置为“红色”。虽然它应该改变其他事物的颜色,但它绝对没有任何作用。我做错什么了?你知道吗


Tags: eventadd颜色redgloballabelcommandcolor
1条回答
网友
1楼 · 发布于 2024-09-29 08:21:09

欢迎来到stackoverflow!你知道吗

在玩了你的例子之后,我相信这与你的钢笔大小有关。你只看到边界,总是黑色的。我已经减少了你的例子一点,下面的作品几乎如预期。注意到每个矩形周围的黑色边框了吗?这就是你想要改变的。你知道吗

import tkinter as tk 

root = tk.Tk()

#  - the canvas  -
canvas = tk.Canvas(root, width=600, height=600)
canvas.grid()

global pensize, pencolor
pensize = 3
pencolor = 'red'

def callback(event):
    canvas.create_rectangle(
        event.x-pensize, event.y-pensize, 
        event.x+pensize, event.y+pensize, 
        fill=pencolor, outline=pencolor)

def setpencolor(color, canvas):
    global pencolor
    pencolor = color

    elements = canvas.find_all()

    for element in elements:
        canvas.itemconfigure(element, fill=color, outline=color)

canvas.bind("<B1-Motion>", callback)

#  - color tool -
tk.Button(root, text='black', 
    command=lambda: setpencolor("black", canvas)).grid()
tk.Button(root, text='red', 
    command=lambda: setpencolor("red", canvas)).grid()
tk.Button(root, text='blue', 
    command=lambda: setpencolor("blue", canvas)).grid()

root.mainloop()

现在,尝试创建矩形,如下所示:

canvas.create_rectangle(
    event.x-pensize, event.y-pensize, 
    event.x+pensize, event.y+pensize, 
    fill=pencolor, outline=pencolor
)

要回答问题的最后一部分,现在必须找到画布上的所有元素,并使用itemconfigure更改它们的属性:

elements = canvas.find_all()

for element in elements:
    canvas.itemconfigure(element, fill=color, outline=color)

相关问题 更多 >