2012-01-03 2 views
5

В моей программе PyQt4 я получаю QColor от пользователя через QColorDialog.
я тогда нужно отформатировать этот QColor для использования в таблицы стилей, которые я в настоящее время достичь по телефону ...Qt - Формат QColor для использования в листе стилей?

QColor.name() 

... который возвращает что-то вроде «# 00ff00», которые затем претерпевают простую строку манипуляция должна быть установлена ​​как таблица стилей для виджета. например:

QWidget.setStyleSheet('* { background-color: '+ QColor.name() + ' }') 

Позже в программе, цвет фона виджета должен быть извлечен (с использованием .stylesheet() и более простых манипуляций со строками) и преобразуется в строку, которая при Eval() ред бы построить QColor идентичного цвета.

Он должен быть преобразован в QColor, поскольку он позже используется в QBrush. QColor необходимо преобразовать в строку одной строки, потому что она записана в файл и импортируется из указанного файла через eval().
(Строка, когда eval() ed должен передать цвет конструктору QColor, так как строка - только одна строка).

В конце концов, мне нужно что-то похож (хотя и не возможно в этой манере), как это:

ColorString = str(QtGui.QColorDialog.getColor().name()) 
EvalString = "QtGui.QColor(" + ColorString +")" 

Ofcourse, этот метод не работает, так как конструктор QColor не принимает такой формат, как " # 00ff00 ', который является форматом, который предоставляет QColorDialog.name() и который принимает QWidget.setStyleSheet().

Как я могу это достичь?

Есть ли способ конвертировать строку типа '# 00ff00' в 3 целых числа, представляющих красный, зеленый и синий цвета, которые затем можно отправить в конструктор QColor?
Спасибо!

Примечание:
Я понимаю, что такой формат «# 00ff00» действительно вовлекает представление этих трех цветов, но я не понимаю, что «ТФ» означает, и призвание .red() на QColor не верните целое число, которое предлагается в формате '# 00ff00'.
Это, вероятно, очевидно, что я не понимаю цвета :)

Характеристики:
- PyQt4
- Python 2.7
- Windows 7

+0

спасибо, поправки –

ответ

3

Попробуйте QColor.setNamedColor(name)

Пример:

string_with_color = '#00ff00' # gathered somehow 

color = QtGui.QColor(0, 0, 0) 
color.setNamedColor(string_with_color) 

, но я не понимаю, что 'след' означает

ff = 255 в шестнадцатеричной системе

EDIT

Как видно из комментариев, решение было преобразовать строку Python в QString

EvalString = "QtGui.QColor(QtCore.QString(" + ColorString +"))" 
+0

Как я уже сказал, string_with_color должен быть передан в конструктор QColor, т.к. QColor находится в однострочной строке, которая будет eval() ed. Конечно, я бы использовал этот метод иначе. Спасибо, в любом случае! –

+1

Я использую PySide вместо PyQt, а 'QColor (name)' отлично работает, может быть, вам нужно преобразовать 'str' в QString? 'EvalString =" QtGui.QColor (QString ("+ ColorString +")) "' – reclosedev

+0

Замечательно! Вы сэр - волшебник. –

Смежные вопросы