鱼C论坛

 找回密码
 立即注册
查看: 1734|回复: 12

[已解决]求助大神,下面的代码有什么错误,应该怎么改正

[复制链接]
发表于 2020-8-28 21:37:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yjx45 于 2020-8-29 09:40 编辑
from tkinter import *
from tkinter import colorchooser

root = Tk()

w = Canvas(root, width = 1000, height = 650, background = "yellow")
w.grid(row = 0, columnspan = 2, padx = 5, pady = 5)
#选择颜色
def setcolour():
    fileName = colorchooser.askcolor()
    return fileName

b1 = Button(root, text = "选择颜色", command = setcolour)
b1.grid(row = 1, column = 1)

i = setcolour()
#判断颜色
if i[1] == (255,255,255):
    k = "white"
elif i[1] == (0,0,0):
    k = "black"
elif i[1] == (255,0,0):
    k = "red"
elif i[1] == (0,255,0):
    k = "green"
elif i[1] == (0,0,255):
    k = "blue"
elif i[1] == (128,0,128):
    k = "purple"
elif i[1] == (255,128,255):
    k = "pink"
elif i[1] == (255,128,0):
    k = "orange"
elif i[1] == (192,192,192):
    k = "silver"
elif i[1] == (128,64,0):
    k = "brown"
else:
    print("对不起,该程序暂不支持您选择的颜色哦,请重试")
    k = None
#删除按键
b2 = Button(text = "DELETE ALL", command = (lambda x = ALL : w.delete(x)))
b2.grid(row = 1)

#绘图
def paint(event, color):
    x1,y1 = (event.x - 2),(event.y - 2)
    x2,y2 = (event.x + 2),(event.y + 2)
    w.create_oval(x1, y1, x2, y2, fill = color, outline = color)

w.bind("<B1-Motion>", paint(color = k))

Label("按住鼠标左键,开始绘画吧").grid(row = 2, columnspan = 2, pady = 5)

mainloop()
最佳答案
2020-8-28 22:39:35
一共有三处问题
帮你修改了,并做了注释。
from tkinter import *
from tkinter import colorchooser

root = Tk()

w = Canvas(root, width = 1000, height = 650, background = "yellow")
w.grid(row = 0, columnspan = 2, padx = 5, pady = 5)
#选择颜色
def setcolour():
    fileName = colorchooser.askcolor()
    return fileName

b1 = Button(root, text = "选择颜色", command = setcolour)
b1.grid(row = 1, column = 1)

i = setcolour()
#判断颜色
#错误1:这后面的颜色都需要改,改为十六进制颜色表示
if i[1] == '#ffffff':
    k = "white"
elif i[1] == '#000000':
    k = "black"
elif i[1] == '#ff0000':
    k = "red"
elif i[1] == '#00ff00':
    k = "green"
elif i[1] == '#0000ff':
    k = "blue"
elif i[1] == '#800080':
    k = "purple"
elif i[1] == '#ff80ff':
    k = "pink"
elif i[1] == '#ff8000':
    k = "orange"
elif i[1] == '#c0c0c0':
    k = "silver"
elif i[1] == '#804000':
    k = "brown"
else:
    print("对不起,该程序暂不支持您选择的颜色哦,请重试")
    k = None
#删除按键
b2 = Button(text = "DELETE ALL", command = (lambda x = ALL : w.delete(x)))
b2.grid(row = 1)

#绘图
def paint(event, color):
    x1,y1 = (event.x - 2),(event.y - 2)
    x2,y2 = (event.x + 2),(event.y + 2)
    w.create_oval(x1, y1, x2, y2, fill = color, outline = color)
#错误2:bind绑定,缺少了一个event参数,需要写成下面这种形式
w.bind("<B1-Motion>", lambda event:paint(event,k))
#错误3:Label创建写错了,没有写控件的主体是谁,后面的参数也没有写关键字。
Label(root,text="按住鼠标左键,开始绘画吧").grid(row = 2, columnspan = 2, pady = 5)

mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-28 21:55:52 | 显示全部楼层
屏幕截图(17).png
也看不懂,只能帮着翻译下了


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 22:01:40 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-8-28 23:36 编辑
w.bind("<B1-Motion>", paint(color = k))
三个问题,上面这句话,paint后面代码删掉,定义时直接写color=k
def paint(event, color=k):
然后,你i的判断取色也有问题,i打印出来是这样的
((255.99609375, 0.0, 0.0), '#ff0000')
那你为什么i[0]不用十六进制的来判断,所以你的判断永远k=None
还有个这个,下面大佬回复后才想起来,这个也是个问题,修改了,但是忘记在这边回帖时说了
Label(root,text="按住鼠标左键,开始绘画吧").grid(row = 2, columnspan = 2, pady = 5)
漏了个参数
把这三个都改了就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 22:39:35 | 显示全部楼层    本楼为最佳答案   
一共有三处问题
帮你修改了,并做了注释。
from tkinter import *
from tkinter import colorchooser

root = Tk()

w = Canvas(root, width = 1000, height = 650, background = "yellow")
w.grid(row = 0, columnspan = 2, padx = 5, pady = 5)
#选择颜色
def setcolour():
    fileName = colorchooser.askcolor()
    return fileName

b1 = Button(root, text = "选择颜色", command = setcolour)
b1.grid(row = 1, column = 1)

i = setcolour()
#判断颜色
#错误1:这后面的颜色都需要改,改为十六进制颜色表示
if i[1] == '#ffffff':
    k = "white"
elif i[1] == '#000000':
    k = "black"
elif i[1] == '#ff0000':
    k = "red"
elif i[1] == '#00ff00':
    k = "green"
elif i[1] == '#0000ff':
    k = "blue"
elif i[1] == '#800080':
    k = "purple"
elif i[1] == '#ff80ff':
    k = "pink"
elif i[1] == '#ff8000':
    k = "orange"
elif i[1] == '#c0c0c0':
    k = "silver"
elif i[1] == '#804000':
    k = "brown"
else:
    print("对不起,该程序暂不支持您选择的颜色哦,请重试")
    k = None
#删除按键
b2 = Button(text = "DELETE ALL", command = (lambda x = ALL : w.delete(x)))
b2.grid(row = 1)

#绘图
def paint(event, color):
    x1,y1 = (event.x - 2),(event.y - 2)
    x2,y2 = (event.x + 2),(event.y + 2)
    w.create_oval(x1, y1, x2, y2, fill = color, outline = color)
#错误2:bind绑定,缺少了一个event参数,需要写成下面这种形式
w.bind("<B1-Motion>", lambda event:paint(event,k))
#错误3:Label创建写错了,没有写控件的主体是谁,后面的参数也没有写关键字。
Label(root,text="按住鼠标左键,开始绘画吧").grid(row = 2, columnspan = 2, pady = 5)

mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-28 22:59:50 | 显示全部楼层
sunrise085 发表于 2020-8-28 22:39
一共有三处问题
帮你修改了,并做了注释。

对,三个问题,我忘记说label的问题了
Label(root,text="按住鼠标左键,开始绘画吧").grid(row = 2, columnspan = 2, pady = 5)
w.bind("<B1-Motion>", lambda event:paint(event,k))
你这个这样写,和我那样写有什么区别么?我没做过TK,尝试下来我那样直接paint也可以啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 23:22:48 | 显示全部楼层
疾风怪盗 发表于 2020-8-28 22:59
对,三个问题,我忘记说label的问题了

你那样的话,就不能传参数进去了,他的程序是需要把选择的画笔颜色传递进去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 23:23:46 | 显示全部楼层
sunrise085 发表于 2020-8-28 23:22
你那样的话,就不能传参数进去了,他的程序是需要把选择的画笔颜色传递进去

有颜色的啊,
def paint(event, color=k):
这里不是也传入颜色了么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 23:27:58 | 显示全部楼层
疾风怪盗 发表于 2020-8-28 23:23
有颜色的啊,这里不是也传入颜色了么

你是怎么修改的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 23:35:03 | 显示全部楼层
sunrise085 发表于 2020-8-28 23:27
你是怎么修改的?
def paint(event, color=k):
就是把定义paint时,传入color=k
在下面
w.bind("<B1-Motion>", paint)
用的时候就不需要了,也可以运行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-29 09:01:09 | 显示全部楼层
疾风怪盗 发表于 2020-8-28 23:35
就是把定义paint时,传入color=k
在下面
用的时候就不需要了,也可以运行的

你确定这样写能运行??

搜狗截图20200829090020.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-29 09:39:56 | 显示全部楼层
感谢,问题已解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-29 10:26:58 | 显示全部楼层
sunrise085 发表于 2020-8-29 09:01
你确定这样写能运行??
def paint(event, color=k):
你这个没改啊
改了确定能运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-29 10:27:53 | 显示全部楼层
既然问题解决了,就设个最佳吧,把求助帖关了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 02:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表