我插入了一个gtk.ColorButton()但是当我检索值(get_color)时,我获得了一个12位十六进制字符串(对于某些颜色)。 问题是我需要它只给我6位数。
这是一个片段:
import pygtk
pygtk.require("2.0")
import gtk
class TestColorButton(object):
def __init__(self):
self.win = gtk.Window()
self.colorbutton = gtk.ColorButton()
container = gtk.VBox()
Button = gtk.Button("Get color")
Button.connect("released", self.get_selected_color)
container.pack_start(self.colorbutton)
container.pack_start(Button)
self.win.add(container)
self.win.show_all()
def get_selected_color(self, widget):
print self.colorbutton.get_color()
if __name__ == "__main__":
TestColorButton()
gtk.main()
我不知道唯一的解决方案是尝试将12位十六进制字符串转换为6位数字(即使我会丢失信息)。因为python中没有任何东西可以使用12位数颜色,所以我真的很想知道这有什么用......
有趣的是,在弹出的窗口中,我可以看到一个6位十六进制字符串。也许如果我能找到那个窗口直到找到它......但是对于一件简单的事情来说似乎很复杂......
答案 0 :(得分:1)
这里有一个小函数,它使用gdk.color的to_floats函数来获取[0..1]范围内的rgb tripple,然后将其转换为适合2位十六进制的[0..255]。
def gdk_to_hex(gdk_color):
colors = gdk_color.to_floats()
return "#" + "".join(["%02x" % (color * 255) for color in colors])
答案 1 :(得分:0)
目标是为我挑选的颜色获取一个6位数的十六进制字符串。一个临时解决方案是采用每个四位数颜色的前两位数字(#rrrrggggbbbb给出#rrggbb)。 我选择的是 将每个四位数颜色转换为16位整数(0000-FFFF到0-65535) 将其重新调整为8位(0-65535至0-255) 将其转换回十六进制字符串(现在提供两个字符而不是四个字符)
我不认为它真的很聪明,但至少它给了我近似我想要的颜色......
该片段已更新:
import pygtk
pygtk.require("2.0")
import gtk
class TestColorButton(object):
def __init__(self):
self.win = gtk.Window()
self.colorbutton = gtk.ColorButton()
container = gtk.VBox()
Button = gtk.Button("Get color")
Button.connect("released", self.get_selected_color)
container.pack_start(self.colorbutton)
container.pack_start(Button)
self.win.add(container)
self.win.show_all()
def get_selected_color(self, widget):
a = self.colorbutton.get_color()
print a
self.gdk_to_hex(a)
def gdk_to_hex(self, gdk_color):
colors = gdk_color.to_string()
a = "#"+"".join([self.fourtotwohexdigit(i) for i in (colors[1:5], colors[5:9], colors[9:13])])
print a
def fourtotwohexdigit(self, hexa):
return hex(int(int(hexa,16)*255/65535))[2:]
if __name__ == "__main__":
TestColorButton()
gtk.main()
答案 2 :(得分:-1)
从
获取对象gtk.gdk.Color时color = self.colorbutton.get_color()
您可以使用
获取字符串表示color.to_string()
12位#fcfce9e94f4f字符串包含每种颜色的十六进制形式4位数,在本例中红色= 64764,绿色= 59881,蓝色= 20303
red=64764 -> fcfc
green=59881 -> e9e9
blue=20303 -> 4f4f
你也可以打印gtk.gdk.Color中的各种颜色,如
color.red
color.green
color.blue
或者如果您更喜欢小数值,范围为0.0 - 1.0
color.red_float
color.green_float
color.blue_float