1
# -*- coding: utf-8 -*-
3
from spyderlib.qt.QtGui import (QLineEdit, QIcon, QHBoxLayout, QColor,
4
QPushButton, QColorDialog, QPixmap)
5
from spyderlib.qt.QtCore import SIGNAL, QSize, Slot, Property
8
class ColorButton(QPushButton):
10
Color choosing push button
12
__pyqtSignals__ = ("colorChanged(QColor)",)
14
def __init__(self, parent=None):
15
QPushButton.__init__(self, parent)
16
self.setFixedSize(20, 20)
17
self.setIconSize(QSize(12, 12))
18
self.connect(self, SIGNAL("clicked()"), self.choose_color)
19
self._color = QColor()
21
def choose_color(self):
22
color = QColorDialog.getColor(self._color, self.parentWidget(),
24
QColorDialog.ShowAlphaChannel)
32
def set_color(self, color):
33
if color != self._color:
35
self.emit(SIGNAL("colorChanged(QColor)"), self._color)
36
pixmap = QPixmap(self.iconSize())
38
self.setIcon(QIcon(pixmap))
40
color = Property("QColor", get_color, set_color)
43
def text_to_qcolor(text):
45
Create a QColor from specified string
46
Avoid warning from Qt when an invalid QColor is instantiated
50
if not isinstance(text, (unicode, str)):
52
if text.startswith('#') and len(text)==7:
53
correct = '#0123456789abcdef'
55
if char.lower() not in correct:
57
elif text not in list(QColor.colorNames()):
59
color.setNamedColor(text)
63
class ColorLayout(QHBoxLayout):
64
"""Color-specialized QLineEdit layout"""
65
def __init__(self, color, parent=None):
66
QHBoxLayout.__init__(self)
67
assert isinstance(color, QColor)
68
self.lineedit = QLineEdit(color.name(), parent)
69
self.connect(self.lineedit, SIGNAL("textChanged(QString)"),
71
self.addWidget(self.lineedit)
72
self.colorbtn = ColorButton(parent)
73
self.colorbtn.color = color
74
self.connect(self.colorbtn, SIGNAL("colorChanged(QColor)"),
76
self.addWidget(self.colorbtn)
78
def update_color(self, text):
79
color = text_to_qcolor(text)
81
self.colorbtn.color = color
83
def update_text(self, color):
84
self.lineedit.setText(color.name())
87
return self.lineedit.text()
1
# -*- coding: utf-8 -*-
3
from spyderlib.qt.QtGui import (QLineEdit, QIcon, QHBoxLayout, QColor,
4
QPushButton, QColorDialog, QPixmap)
5
from spyderlib.qt.QtCore import SIGNAL, QSize, Slot, Property
8
class ColorButton(QPushButton):
10
Color choosing push button
12
__pyqtSignals__ = ("colorChanged(QColor)",)
14
def __init__(self, parent=None):
15
QPushButton.__init__(self, parent)
16
self.setFixedSize(20, 20)
17
self.setIconSize(QSize(12, 12))
18
self.connect(self, SIGNAL("clicked()"), self.choose_color)
19
self._color = QColor()
21
def choose_color(self):
22
color = QColorDialog.getColor(self._color, self.parentWidget(),
24
QColorDialog.ShowAlphaChannel)
32
def set_color(self, color):
33
if color != self._color:
35
self.emit(SIGNAL("colorChanged(QColor)"), self._color)
36
pixmap = QPixmap(self.iconSize())
38
self.setIcon(QIcon(pixmap))
40
color = Property("QColor", get_color, set_color)
43
def text_to_qcolor(text):
45
Create a QColor from specified string
46
Avoid warning from Qt when an invalid QColor is instantiated
50
if not isinstance(text, (unicode, str)):
52
if text.startswith('#') and len(text)==7:
53
correct = '#0123456789abcdef'
55
if char.lower() not in correct:
57
elif text not in list(QColor.colorNames()):
59
color.setNamedColor(text)
63
class ColorLayout(QHBoxLayout):
64
"""Color-specialized QLineEdit layout"""
65
def __init__(self, color, parent=None):
66
QHBoxLayout.__init__(self)
67
assert isinstance(color, QColor)
68
self.lineedit = QLineEdit(color.name(), parent)
69
self.connect(self.lineedit, SIGNAL("textChanged(QString)"),
71
self.addWidget(self.lineedit)
72
self.colorbtn = ColorButton(parent)
73
self.colorbtn.color = color
74
self.connect(self.colorbtn, SIGNAL("colorChanged(QColor)"),
76
self.addWidget(self.colorbtn)
78
def update_color(self, text):
79
color = text_to_qcolor(text)
81
self.colorbtn.color = color
83
def update_text(self, color):
84
self.lineedit.setText(color.name())
87
return self.lineedit.text()