Python Tkinter创建椭圆方法不会更改颜色

Python Tkinter创建椭圆方法不会更改颜色,python,tkinter,drawing,shapes,python-3.9,Python,Tkinter,Drawing,Shapes,Python 3.9,我使用了按钮,所以当点击时,它们会改变椭圆形的颜色,以便于绘制。问题是,无论我如何更改颜色变量,它都会创建一个白色椭圆形。有什么帮助吗 代码: 从tkinter导入* master=Tk() master.title('用Python绘制') 画布宽度=600 画布高度=450 “白色” bg='黑色' def REDPEN(): 颜色class='red' 印刷品(彩色) def BLUEPEN(): “蓝色” 印刷品(彩色) def GREENPEN(): “绿色” 印刷品(彩色) def油

我使用了按钮,所以当点击时,它们会改变椭圆形的颜色,以便于绘制。问题是,无论我如何更改颜色变量,它都会创建一个白色椭圆形。有什么帮助吗

代码:

从tkinter导入*
master=Tk()
master.title('用Python绘制')
画布宽度=600
画布高度=450
“白色”
bg='黑色'
def REDPEN():
颜色class='red'
印刷品(彩色)
def BLUEPEN():
“蓝色”
印刷品(彩色)
def GREENPEN():
“绿色”
印刷品(彩色)
def油漆(事件):
x1,y1=(事件x-1),(事件y-1)
x2,y2=(事件x+1),(事件y+1)
c、 创建椭圆(x1,y1,x2,y2,填充=颜色,轮廓=颜色,宽度=0)
RedButton=按钮(master,text=“RED”,command=REDPEN)
BlueButton=按钮(master,text=“BLUE”,command=BLUEPEN)
绿色按钮=按钮(主控,text=“绿色”,命令=绿色笔)
RedButton.pack()
BlueButton.pack()
GreenButton.pack()
c=画布(主控,宽度=画布宽度,高度=画布高度,背景=背景)
c、 打包(展开=是,填充=两者)
c、 绑定(“”,油漆)
message=标签(master,text='按住并拖动以绘制')
消息包(侧面=底部)
master.mainloop()

当您更改函数中颜色变量的值时,主颜色变量中不会反映相同的值,这就是问题的原因,因为您从未告诉python函数内和函数外的变量颜色相同,因此python认为这两个是不同的,一个是本地的,另一个是全局的

一个简单的修复方法是向python声明,每当您在其他函数中使用全局颜色变量时,只要使用python的global关键字,就可以引用该变量。这解决了您的问题-:

from tkinter import *

master = Tk()
master.title('Painting in Python')

canvas_width = 600
canvas_height = 450
color='white'
bg ='black'

def REDPEN():
    global color
    color='red'
    print(color)
def BLUEPEN():
    global color
    color='blue'
    print(color)
def GREENPEN():
    global color
    color='green'
    print(color)

def paint(event):
    global color
    x1,y1=(event.x-1),(event.y-1)
    x2,y2=(event.x+1),(event.y+1)
    c.create_oval(x1,y1,x2,y2,fill=color,outline=color,width=0)

RedButton = Button(master, text = "RED", command =REDPEN)
BlueButton = Button(master, text = "BLUE", command =BLUEPEN)
GreenButton = Button(master, text = "GREEN", command =GREENPEN)

RedButton.pack()
BlueButton.pack()
GreenButton.pack()


c=Canvas(master,width=canvas_width,height=canvas_height,bg=bg)

c.pack(expand=YES,fill=BOTH)
c.bind('<B1-Motion>',paint)

message=Label(master,text='Press and Drag to draw')
message.pack(side=BOTTOM)
master.mainloop()
从tkinter导入*
master=Tk()
master.title('用Python绘制')
画布宽度=600
画布高度=450
“白色”
bg='黑色'
def REDPEN():
全局颜色
颜色class='red'
印刷品(彩色)
def BLUEPEN():
全局颜色
“蓝色”
印刷品(彩色)
def GREENPEN():
全局颜色
“绿色”
印刷品(彩色)
def油漆(事件):
全局颜色
x1,y1=(事件x-1),(事件y-1)
x2,y2=(事件x+1),(事件y+1)
c、 创建椭圆(x1,y1,x2,y2,填充=颜色,轮廓=颜色,宽度=0)
RedButton=按钮(master,text=“RED”,command=REDPEN)
BlueButton=按钮(master,text=“BLUE”,command=BLUEPEN)
绿色按钮=按钮(主控,text=“绿色”,命令=绿色笔)
RedButton.pack()
BlueButton.pack()
GreenButton.pack()
c=画布(主控,宽度=画布宽度,高度=画布高度,背景=背景)
c、 打包(展开=是,填充=两者)
c、 绑定(“”,油漆)
message=标签(master,text='按住并拖动以绘制')
消息包(侧面=底部)
master.mainloop()

您在这些函数中设置的是局部变量
color
,而不是全局变量。谢谢您,我已经用头撞桌子两个小时了!
from tkinter import *

master = Tk()
master.title('Painting in Python')

canvas_width = 600
canvas_height = 450
color='white'
bg ='black'

def REDPEN():
    global color
    color='red'
    print(color)
def BLUEPEN():
    global color
    color='blue'
    print(color)
def GREENPEN():
    global color
    color='green'
    print(color)

def paint(event):
    global color
    x1,y1=(event.x-1),(event.y-1)
    x2,y2=(event.x+1),(event.y+1)
    c.create_oval(x1,y1,x2,y2,fill=color,outline=color,width=0)

RedButton = Button(master, text = "RED", command =REDPEN)
BlueButton = Button(master, text = "BLUE", command =BLUEPEN)
GreenButton = Button(master, text = "GREEN", command =GREENPEN)

RedButton.pack()
BlueButton.pack()
GreenButton.pack()


c=Canvas(master,width=canvas_width,height=canvas_height,bg=bg)

c.pack(expand=YES,fill=BOTH)
c.bind('<B1-Motion>',paint)

message=Label(master,text='Press and Drag to draw')
message.pack(side=BOTTOM)
master.mainloop()