【问题标题】:write a code to make random colors on object编写代码以在对象上生成随机颜色
【发布时间】:2021-10-02 19:10:07
【问题描述】:

我尝试在 tkinter 上用 pyhton 编写代码。

def random_color():
hashtag = str('#')
eka_väri = random.choice(range(0,255))
toka_väri = random.choice(range(0, 256))
kolmas_väri = random.choice(range(0,256))
red = hex(eka_väri)
green = hex(toka_väri)
blue = hex(kolmas_väri)
gbl= [red[2:], green[2:], blue[2:]]
yhdistäjä = ''
x = yhdistäjä.join(gbl)
return (hashtag + x)

该代码将 RGB 数字转换为十六进制数字。它的工作原理是这样的。

canvas.create_polygon(10, 10, 10, 60, 50, 35, fill=random_color)

当我这样说它不再起作用了。

def random_triangle():
p1 = random.randrange(w)
p2 = random.randrange(h)
p3 = random.randrange(w)
p4 = random.randrange(h)
p5 = random.randrange(w)
p6 = random.randrange(h)
Canvas.create_polygon(p1, p2, p3, p4, p5, p6, fill=random_color, outline=random_color)

谁能告诉我为什么?

【问题讨论】:

  • “不起作用”是什么意思?它会抛出错误吗?是否显示错误的颜色?你有一个名为random_color 的变量,它是从函数random_color 初始化的吗?
  • 由于random_color是一个函数,你需要执行它来获得随机颜色。所以应该是fill=random_color()

标签: python tkinter colors


【解决方案1】:

填充和轮廓参数必须是函数。这将起作用:

import random
from tkinter import *

def random_color():
    hashtag = str('#')
    eka_väri = random.choice(range(0,255))
    toka_väri = random.choice(range(0, 256))
    kolmas_väri = random.choice(range(0,256))
    red = hex(eka_väri)
    green = hex(toka_väri)
    blue = hex(kolmas_väri)
    gbl= [red[2:], green[2:], blue[2:]]
    yhdistäjä = ''
    x = yhdistäjä.join(gbl)
    return (hashtag + x)

def random_triangle():
    w = 500
    h = 500
    p1 = random.randrange(w)
    p2 = random.randrange(h)
    p3 = random.randrange(w)
    p4 = random.randrange(h)
    p5 = random.randrange(w)
    p6 = random.randrange(h)
    Canvas.create_polygon(p1, p2, p3, p4, p5, p6, fill=random_color(), outline=random_color())
root = Tk()
Canvas = Canvas()
Canvas.pack()
random_triangle()
root.mainloop()

当返回的十六进制代码格式不正确时,您的 random_color() 函数也会出错。除了使用 rgb,您还可以使用如下的十六进制代码:

def random_color():
    return "#" + ''.join([random.choice('0123456789ABCDEF') for j in range(6)])

【讨论】:

  • @BryanOakley 范围(0, 256)是正确的,因为 3 个变量等于 255 表示“ffffff”-> 颜色为白色。我收到错误时的颜色是“a80e0”,等于 rgb(10、128、224),应该是“0a80e0”。问题是字符串。我花了一段时间才弄清楚。
  • 您可以使用"#{:06x}".format(random.randint(0, 0xffffff)) 简单地获得随机颜色。
猜你喜欢
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 2021-05-22
  • 1970-01-01
  • 2020-11-27
  • 2011-08-02
  • 2015-11-07
相关资源
最近更新 更多