You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python Turtle结合Tkinter文本输入的无效颜色字符串错误?

问题:Tkinter控制Python Turtle时设置画笔颜色报错

尝试将Turtle画笔颜色改为red时,出现如下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\acer\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "C:\Users\acer\PycharmProjects\Lesson1\1.py", line 81, in <lambda>
    colourer = Button(text='Colour:', width=15, height=3, command=lambda: colour_change(colour, pen))
  File "C:\Users\acer\PycharmProjects\Lesson1\1.py", line 49, in colour_change
    feather.color(new_color)
  File "C:\Users\acer\AppData\Local\Programs\Python\Python39\lib\turtle.py", line 2217, in color
    pcolor = self._colorstr(pcolor)
  File "C:\Users\acer\PycharmProjects\Lesson1\1.py", line 2697, in _colorstr
    return self.screen._colorstr(args)
  File "C:\Users\acer\AppData\Local\Programs\Python\Python39\lib\turtle.py", line 1159, in _colorstr
    raise TurtleGraphicsError("bad color string: %s" % str(color))
turtle.TurtleGraphicsError: bad color string: red

操作流程:先输入颜色,点击Save change保存,再点击Colour按钮。相关代码如下:

import turtle
from tkinter import *

# Windows created
control = Tk()
pen = turtle.Turtle()
# A bit of design
# Button size: 15 = 115 px, 1 = 7 and 2/3 px
pen.shape('turtle')
control.title('Turtle controller v1.0')
control.geometry('345x168')
colour = ""


def colour_change(new_color, feather, hexa=False, rgb=False):
    if hexa is True:
        feather.color('#%s' % new_color)
    elif rgb is True:
        feather.colormode(255)
        feather.color(new_color)
    else:
        feather.color(new_color)


def changecolour():
    global colour
    colour = colourin.get(1.0, END)


colourer = Button(text='Colour', width=15, height=3, command=lambda: colour_change(colour, pen))
colourer.place(x=0, y=112)
colourin = Text(width=15, height=3)
colourin.place(x=115, y=112)
colourconv = Button(text='Save change', width=15, height=3, command=changecolour)
colourconv.place(x=230, y=112)
# Window mainloop
turtle.mainloop()
control.mainloop()

输入Red、red以及"red"均无效,调试发现Tkinter的文本内容传递正常,但Turtle不接收该字符串。


问题原因

colourin.get(1.0, END)会获取文本框内的全部内容,包括输入结束后自动添加的换行符\n,实际传递给Turtle的颜色字符串是'red\n',而不是纯净的'red',Turtle无法识别带换行符的颜色字符串。

解决方法

修改changecolour函数,在获取文本后用strip()方法去除首尾的空白字符(包括换行符、空格等):

def changecolour():
    global colour
    colour = colourin.get(1.0, END).strip()

另外,注意不要输入带引号的颜色值(比如"red"),直接输入red即可,否则strip()后得到的是'"red"',同样会被Turtle判定为无效颜色字符串。

内容的提问来源于stack exchange,提问作者DanVader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:20:42