如何解决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
相关产品推荐
相关产品推荐

