ColorButton提供12位十六进制字符串而不是6位

时间:2013-10-09 15:44:34

标签: pygtk

我插入了一个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位十六进制字符串。也许如果我能找到那个窗口直到找到它......但是对于一件简单的事情来说似乎很复杂......

3 个答案:

答案 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