1

gtk.ColorButton() を挿入しましたが、値を取得すると (get_color)、12 桁の 16 進文字列 (特定の色の場合) を取得します。問題は、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 桁の 16 進文字列を 6 桁の文字列に変換することであるかどうかはわかりません (情報が失われますが)。Python では 12 桁の色を使用できるものは何もないため、これを何に使用したのか真剣に考えています...

おもしろいのは、ポップアップするウィンドウに 6 桁の 16 進文字列が表示されることです。たぶん、そのウィンドウが見つかるまで get_childs できれば...しかし、単純な問題としては複雑に思えます...

4

3 に答える 3

1

これは、gdk.color の to_floats 関数を使用して [0..1] の範囲の RGB トリプルを取得し、それを 2 桁の 16 進数に適した [0..255] に変換する小さな関数です。

def gdk_to_hex(gdk_color):
    colors = gdk_color.to_floats()
    return "#" + "".join(["%02x" % (color * 255) for color in colors])
于 2014-02-09T00:50:11.713 に答える
0

目標は、選択した色の 6 桁の 16 進文字列を取得することでした。一時的な解決策の 1 つは、各 4 桁の色の最初の 2 桁を取得することでした (#rrrrggggbbbb は #rrggbb になります)。私が選んだのは、各 4 桁の色を 16 ビットの整数 (0000 ~ FFFF から 0 ~ 65535) に変換し、8 ビット (0 ~ 65535 から 0 ~ 255) に再スケーリングし、16 進数の文字列に変換し直すことでした (代わりに 2 つの文字が得られます)。 4人の)

私はそれが本当に賢いとは思いませんが、少なくとも私が欲しかった色をほぼ与えてくれます...

スニペットが更新されました:

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()
于 2014-03-11T11:25:52.223 に答える
-1

オブジェクト gtk.gdk.Color を取得するとき

color = self.colorbutton.get_color()

で文字列表現を取得できます

color.to_string()

12 桁の #fcfce9e94f4f 文字列には、各色の 16 進数の 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 の範囲の 10 進数値を使用する場合

color.red_float
color.green_float
color.blue_float
于 2013-10-11T21:26:28.420 に答える