Поместите Gdk.RGBA в Gtk.ListStore, верните его, нашли другой цвет - PullRequest
0 голосов
/ 06 июля 2019

Я положил Gdk.RGBA в Gtk.ListStore и попытался вернуть его:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk

model = Gtk.ListStore(int, int, Gdk.RGBA)
bgcolor = Gdk.RGBA(red=1, green=0, blue=0)
model.append([0, 10, bgcolor])

print(bgcolor)
print(model[0][2])

Я нашел другой цвет:

Gdk.RGBA(red=1.000000, green=0.000000, blue=0.000000, alpha=1.000000)
Gdk.RGBA(red=0.000000, green=0.000000, blue=0.000000, alpha=1.000000)

Что происходитздесь

Ответы [ 2 ]

0 голосов
/ 13 июля 2019

В дополнение к ответу @theGtknerd, возможно, существует более простой обходной путь.ИСПОЛЬЗУЙТЕ тип столбца object вместо Gdk.RGBA.

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk

model = Gtk.ListStore(int, int, object)  # Instead of Gdk.RGBA
bgcolor = Gdk.RGBA(red=1, green=0, blue=0)
model.append([0, 10, bgcolor])

print(bgcolor)
print(model[0][2])

Вывод:

Gdk.RGBA(red=1.000000, green=0.000000, blue=0.000000, alpha=1.000000)
Gdk.RGBA(red=1.000000, green=0.000000, blue=0.000000, alpha=1.000000)
0 голосов
/ 08 июля 2019

Это ошибка в Gtk. Например, это показывает, что значения R и G теряются:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk

model = Gtk.ListStore(Gdk.RGBA)
bgcolor = Gdk.RGBA(red=0, green=0, blue=0, alpha=0)
model.append([bgcolor])
bgcolor = Gdk.RGBA(red=0.5, green=0.5, blue=0.5, alpha=0.5)
model.append([bgcolor])
bgcolor = Gdk.RGBA(red=1, green=1, blue=1, alpha=1)
model.append([bgcolor])

print(model[0][0])
print(model[1][0])
print(model[2][0])

Потому что результаты:

Gdk.RGBA(red=0.000000, green=0.000000, blue=0.000000, alpha=0.000000)
Gdk.RGBA(red=0.000000, green=0.000000, blue=0.500000, alpha=0.500000)
Gdk.RGBA(red=0.000000, green=0.000000, blue=1.000000, alpha=1.000000)

Некоторое время назад в Gnome / Gtk было зарегистрировано сообщение об ошибке, но я больше не могу его найти. Я верю, что он потерян, когда инфраструктура перешла на GitLab.

Возможный обходной путь - использовать отдельные столбцы для значений RGBA и каждый раз создавать / восстанавливать RGBA. Пример:

model = Gtk.ListStore(float, float, float, float)
in_color = Gdk.RGBA(red=0.5, green=0.5, blue=0.5, alpha=0.5)
model.append([in_color.red, in_color.green, in_color.blue, in_color.alpha])
out_color = Gdk.RGBA()
out_color.red = model[0][0]
out_color.green = model[0][1]
out_color.blue = model[0][2]
out_color.alpha = model[0][3]

print(out_color)
...