some cleanup and suggested revisions
This commit is contained in:
parent
05dc98c8c8
commit
9cb8986d90
@ -18,10 +18,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
""" example application main window """
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(MainWindow, self).__init__(*args, **kwargs)
|
||||
pg.setConfigOption('imageAxisOrder', 'row-major')
|
||||
|
||||
main_wid = QtWidgets.QWidget()
|
||||
self.setCentralWidget(main_wid)
|
||||
self.setWindowTitle('pyqtgraph example: Palette application test')
|
||||
self.setWindowTitle('pyqtgraph example: Palette demonstration')
|
||||
self.resize(600,600)
|
||||
|
||||
# test_palette = pg.palette.get('system')
|
||||
@ -45,7 +46,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
('legacy fg/bg 2', 1,4, self.handle_button_leg2 ),
|
||||
('apply <mono green>', 2,2, self.handle_button_mono1 ),
|
||||
('apply <mono amber>', 3,2, self.handle_button_mono2 ),
|
||||
# ('apply <mono blue>' , 2,4, self.handle_button_mono3 ),
|
||||
('apply <relaxed-dark>' , 2,3, self.handle_button_pal2 ),
|
||||
('apply <relaxed-light>', 2,4, self.handle_button_pal3 ),
|
||||
('apply <pastels>' , 3,3, self.handle_button_pal4 ),
|
||||
@ -66,14 +66,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.data1 = +3 + np.random.normal(size=(15)) #500))
|
||||
self.data2 = -3 + np.random.normal(size=(15)) #500))
|
||||
|
||||
# self.curve1 = pg.PlotDataItem(
|
||||
# pen='r',
|
||||
# symbol='o', symbolSize=10, symbolPen='gr_fg', symbolBrush=('y',127),
|
||||
# hoverable=True, hoverPen='w', hoverBrush='w')
|
||||
self.curve1 = pg.ScatterPlotItem(
|
||||
symbol='o', symbolSize=12, symbolPen='p1', symbolBrush=('p2',127),
|
||||
hoverable=True, hoverPen='gr_acc', hoverBrush='gr_reg')
|
||||
# self.curve1.setHoverable(True)
|
||||
self.plt.addItem(self.curve1)
|
||||
|
||||
self.curve2 = pg.PlotCurveItem(pen='p3', brush=('p3',128))
|
||||
@ -99,7 +94,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
def testSignal(self, val):
|
||||
""" demonstrate use of PaletteChanged signal """
|
||||
print('"Palette changed" signal was received with value', val)
|
||||
|
||||
|
||||
def handle_button_timer_on(self):
|
||||
""" (re-)activate timer """
|
||||
@ -169,9 +163,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.plt.setTitle('%0.2f fps' % self.fps)
|
||||
QtWidgets.QApplication.processEvents() ## force complete redraw for every plot
|
||||
|
||||
mkQApp("Palette test application")
|
||||
mkQApp("Palette test and design application")
|
||||
main_window = MainWindow()
|
||||
|
||||
## Start Qt event loop
|
||||
if __name__ == '__main__':
|
||||
QtWidgets.QApplication.instance().exec_()
|
||||
pg.mkQApp().exec_()
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Update a simple plot as rapidly as possible to measure speed.
|
||||
Adjust color palettes and apply them to a running plot
|
||||
"""
|
||||
|
||||
## Add path to library (just for examples; you do not need this)
|
||||
@ -13,19 +13,18 @@ from pyqtgraph.Qt import mkQApp, QtCore, QtGui, QtWidgets
|
||||
from pyqtgraph.ptime import time
|
||||
import pyqtgraph as pg
|
||||
|
||||
|
||||
class MainWindow(QtWidgets.QMainWindow):
|
||||
""" example application main window """
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(MainWindow, self).__init__(*args, **kwargs)
|
||||
pg.setConfigOption('imageAxisOrder', 'row-major')
|
||||
|
||||
force_dark = True # start in dark mode on Windows
|
||||
|
||||
self.setWindowTitle('pyqtgraph example: Palette application test')
|
||||
force_dark = False # start in forced dark mode?
|
||||
self.setWindowTitle('pyqtgraph example: Palette editor')
|
||||
self.resize(600,600)
|
||||
|
||||
self.palette_options = (
|
||||
('system', 'system', []),
|
||||
('system (reapply to update)', 'system', []),
|
||||
('legacy', 'legacy', []),
|
||||
('relaxed (dark)' , 'relaxed_dark', []),
|
||||
('relaxed (light)', 'relaxed_light', []),
|
||||
@ -38,8 +37,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
|
||||
self.colormap_options = (
|
||||
'CET-C1', 'CET-C2','CET-C6','CET-C7', 'CET-R2', 'CET-R4',
|
||||
'CET-L8', 'CET-L16', 'none'
|
||||
# , 'none', 'CET-C1', 'CET-C2', 'CET-C3', 'CET-C4', 'CET-C5', 'CET-C6', 'CET-C7', 'CET-CBC1', 'CET-CBC2'
|
||||
'CET-L8', 'CET-L16', 'CET-CBC1', 'CET-CBC2', 'none'
|
||||
)
|
||||
|
||||
app = QtWidgets.QApplication.instance()
|
||||
@ -50,10 +48,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
app.setStyle("Fusion")
|
||||
|
||||
self.ui = self.prepare_ui() # relocate long-winded window layout
|
||||
# dictionary self.ui contains references to:
|
||||
# 'sample_start' QLineEdit for start of colormap sampling
|
||||
# 'sample_step' QLineEdit for step of colormap sampling
|
||||
# 'dark' QPushButton for toggling dark / standard GUI
|
||||
# dictionary self.ui contains references to UI elements
|
||||
|
||||
if force_dark:
|
||||
self.ui['dark'].setChecked(True)
|
||||
@ -63,8 +58,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.open_palette.apply()
|
||||
self.update_color_fields( self.open_palette )
|
||||
|
||||
self.num_points = 30
|
||||
|
||||
self.num_points = 30
|
||||
# configure overview plot with four colors:
|
||||
plt = self.ui['plot1']
|
||||
plt.enableAutoRange(False)
|
||||
@ -81,8 +75,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.curves.append( (1, 1, curve) ) # dataset 1, vertical offset 3
|
||||
plt.addItem(curve)
|
||||
curve = pg.ScatterPlotItem(
|
||||
symbol='o', size=5, pen='p0', brush='p0', # ('p0',127),
|
||||
hoverable=True, hoverPen='gr_acc', hoverBrush='gr_reg')
|
||||
symbol='o', size=5, pen='p0', brush=('p0',127),
|
||||
hoverable=True, hoverPen='gr_acc', hoverBrush='p0')
|
||||
self.curves.append( (1, 1, curve) ) # dataset 1, vertical offset 2
|
||||
plt.addItem(curve)
|
||||
|
||||
@ -110,6 +104,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
item = pg.LinearRegionItem( values=(4, 8), orientation='vertical' )
|
||||
plt.addItem(item)
|
||||
|
||||
# show off some color text:
|
||||
col_list = [
|
||||
('k','black'),('b','blue'),('c','cyan'),('g','green'),('y','yellow'),
|
||||
('r','red'),('m','magenta'),('w','white')]
|
||||
@ -136,7 +131,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.phases = np.zeros(9)
|
||||
self.timed_update()
|
||||
|
||||
|
||||
### handle GUI interaction ###############################################
|
||||
def update_color_fields(self, pal):
|
||||
""" update line edit fields for selected palette """
|
||||
@ -240,7 +234,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.phases += self.speed * np.random.normal(1, 1, size=9)
|
||||
for idx in range(1, self.data.shape[0]):
|
||||
self.data[idx, :-1] = self.data[idx, 1:] # roll
|
||||
# self.data[idx, -1] = np.random.normal()
|
||||
self.data[1:, -1] = 0.5 * np.sin( self.phases[1:] )
|
||||
xdata = self.data[0,:]
|
||||
for idx, offset, curve in self.curves:
|
||||
@ -254,23 +247,20 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
else:
|
||||
s = np.clip(dt*3., 0, 1)
|
||||
self.fps = self.fps * (1-s) + (1.0/dt) * s
|
||||
self.ui['plot2'].setTitle('%0.2f fps' % self.fps)
|
||||
self.ui['plot2'].setTitle('%0.1f fps' % self.fps)
|
||||
QtWidgets.QApplication.processEvents() ## force complete redraw for every plot
|
||||
|
||||
|
||||
### Qt color definitions for dark palette on Windows #####################
|
||||
def make_dark_QPalette(self):
|
||||
# color definitions match QDarkstyle
|
||||
""" manually define a dark mode palette """
|
||||
BLACK = QtGui.QColor('#000000')
|
||||
# BG_LIGHT = QtGui.QColor('#505F69')
|
||||
# BG_NORMAL = QtGui.QColor('#32414B')
|
||||
# BG_DARK = QtGui.QColor('#19232D')
|
||||
BG_LIGHT = QtGui.QColor('#505354') # #32414B
|
||||
BG_NORMAL = QtGui.QColor('#2e3132') # #212a31
|
||||
BG_DARK = QtGui.QColor('#0e1112') # #10151
|
||||
FG_LIGHT = QtGui.QColor('#f0f4f5') # #F0F0F0
|
||||
FG_NORMAL = QtGui.QColor('#d4d8d9') # #AAAAAA
|
||||
FG_DARK = QtGui.QColor('#b8bcbd') # #787878
|
||||
BG_LIGHT = QtGui.QColor('#505354')
|
||||
BG_NORMAL = QtGui.QColor('#2e3132')
|
||||
BG_DARK = QtGui.QColor('#0e1112')
|
||||
FG_LIGHT = QtGui.QColor('#f0f4f5')
|
||||
FG_NORMAL = QtGui.QColor('#d4d8d9')
|
||||
FG_DARK = QtGui.QColor('#b8bcbd')
|
||||
SEL_LIGHT = QtGui.QColor('#148CD2')
|
||||
SEL_NORMAL = QtGui.QColor('#1464A0')
|
||||
SEL_DARK = QtGui.QColor('#14506E')
|
||||
@ -331,14 +321,14 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
l_layout.setSpacing(1)
|
||||
row_idx = 0
|
||||
|
||||
label = QtWidgets.QLabel('System style:')
|
||||
label = QtWidgets.QLabel('Override system style:')
|
||||
l_layout.addWidget( label, row_idx,0, 1,2 )
|
||||
|
||||
label = QtWidgets.QLabel('Select a palette:')
|
||||
l_layout.addWidget( label, row_idx,2, 1,2 )
|
||||
row_idx += 1
|
||||
|
||||
btn = QtWidgets.QPushButton('dark GUI')
|
||||
btn = QtWidgets.QPushButton('Apply dark GUI')
|
||||
btn.setCheckable(True)
|
||||
btn.setChecked(False)
|
||||
btn.clicked.connect(self.handle_dark_button)
|
||||
@ -423,11 +413,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
|
||||
return ui
|
||||
|
||||
|
||||
|
||||
mkQApp("Palette test application")
|
||||
mkQApp("Palette editor")
|
||||
main_window = MainWindow()
|
||||
|
||||
## Start Qt event loop
|
||||
if __name__ == '__main__':
|
||||
QtWidgets.QApplication.instance().exec_()
|
||||
pg.mkQApp().exec_()
|
@ -23,8 +23,8 @@ examples = OrderedDict([
|
||||
('Remote Plotting', 'RemoteSpeedTest.py'),
|
||||
('Scrolling plots', 'scrollingPlots.py'),
|
||||
('Color Maps', 'colorMaps.py'),
|
||||
('Palette tester','PaletteTestAndEdit.py'),
|
||||
('Palette adjustment','PaletteApplicationExample.py'),
|
||||
('Palette demonstration','PaletteDemonstration.py'),
|
||||
('Palette editor','PaletteEditor.py'),
|
||||
('HDF5 big data', 'hdf5.py'),
|
||||
('Demos', OrderedDict([
|
||||
('Optics', 'optics_demos.py'),
|
||||
|
@ -7,7 +7,6 @@ import collections
|
||||
import warnings
|
||||
|
||||
__all__ = ['ColorRegistry']
|
||||
DEBUG = False
|
||||
|
||||
DEFAULT_COLORS = {
|
||||
'b': QtGui.QColor( 0, 0,255,255),
|
||||
@ -17,8 +16,6 @@ DEFAULT_COLORS = {
|
||||
'm': QtGui.QColor(255, 0,255,255),
|
||||
'y': QtGui.QColor(255,255, 0,255),
|
||||
'k': QtGui.QColor( 0, 0, 0,255),
|
||||
# 'd': QtGui.QColor(150,150,150,255),
|
||||
# 'l': QtGui.QColor(200,200,200,255),
|
||||
'w': QtGui.QColor(255,255,255,255),
|
||||
's': QtGui.QColor(100,100,150,255),
|
||||
'gr_acc':QtGui.QColor(200,200,100,255), # graphical accent color: pastel yellow
|
||||
@ -53,11 +50,10 @@ for key, col in [ # add functional colors
|
||||
|
||||
del key, col # let the linter know that we are done with these
|
||||
|
||||
|
||||
def _expand_rgba_hex_string(hex):
|
||||
""" normalize hex string formats and extract alpha when present """
|
||||
length = len(hex)
|
||||
if length < 4: return None, None
|
||||
if length < 4 : return None, None
|
||||
if hex[0] != '#': return None, None
|
||||
if length == 4:
|
||||
alpha = 255
|
||||
@ -83,7 +79,6 @@ class ColorRegistry(QtCore.QObject):
|
||||
Instantiated by 'functions.py' and retrievable as functions.COLOR_REGISTRY
|
||||
"""
|
||||
paletteHasChangedSignal = QtCore.Signal() # equated to pyqtSignal in qt.py for PyQt
|
||||
|
||||
_registrationGenerator = itertools.count()
|
||||
|
||||
def __init__(self, color_dic):
|
||||
@ -106,12 +101,11 @@ class ColorRegistry(QtCore.QObject):
|
||||
name = alpha = None
|
||||
if color is None or isinstance( color, str):
|
||||
name = color
|
||||
# elif hasattr( color, '__len__'):
|
||||
elif isinstance( color, (collections.abc.Sequence, np.ndarray) ): # list-like, not a dictionary
|
||||
length = len(color)
|
||||
if length == 0:
|
||||
return False
|
||||
if length >= 1:
|
||||
if length >= 1:
|
||||
name = color[0]
|
||||
# if color id is list-like, the first element needs to be str or None
|
||||
if not ( color is None or isinstance(name,str) ): return False
|
||||
@ -121,7 +115,6 @@ class ColorRegistry(QtCore.QObject):
|
||||
if name is not None:
|
||||
# if not isinstance(name,str): return False # pen id has to be str or a list-like starting with str
|
||||
if len(name) < 1: name = None # map '' to None
|
||||
# elif name[0] == '#': return False # strings that start with # are explicit rgb codes
|
||||
if alpha is not None: alpha = int(alpha)
|
||||
return (name, alpha)
|
||||
|
||||
@ -133,7 +126,6 @@ class ColorRegistry(QtCore.QObject):
|
||||
name = width = alpha = None
|
||||
if pen is None or isinstance( pen, str):
|
||||
name = pen
|
||||
# elif hasattr( pen, '__len__'):
|
||||
elif isinstance( pen, (collections.abc.Sequence, np.ndarray) ): # list-like, not a dictionary
|
||||
length = len(pen)
|
||||
if length == 0:
|
||||
@ -149,7 +141,6 @@ class ColorRegistry(QtCore.QObject):
|
||||
if name is not None:
|
||||
if type(name) != str: return False # pen id has to be str or a list-like starting with str
|
||||
if len(name) < 1 : name = None # map '' to None
|
||||
# elif name[0] == '#' : return False # strings that start with # are explicit rgb codes
|
||||
if width is not None: width = int(width)
|
||||
if alpha is not None: alpha = int(alpha)
|
||||
return (name, width, alpha)
|
||||
@ -171,7 +162,8 @@ class ColorRegistry(QtCore.QObject):
|
||||
name, alpha_from_hex = _expand_rgba_hex_string( name )
|
||||
if name is None: return None
|
||||
if alpha is None and alpha_from_hex is not None:
|
||||
alpha = alpha_from_hex
|
||||
# alpha = alpha_from_hex
|
||||
desc = (name, alpha_from_hex) # handle extended 4 bytes rgba hex strings
|
||||
# print('preparing hex color:',name)
|
||||
skipCache = True
|
||||
register = False
|
||||
@ -204,7 +196,8 @@ class ColorRegistry(QtCore.QObject):
|
||||
name, alpha_from_hex = _expand_rgba_hex_string( name )
|
||||
if name is None: return None
|
||||
if alpha is None and alpha_from_hex is not None:
|
||||
alpha = alpha_from_hex
|
||||
# alpha = alpha_from_hex
|
||||
desc = (name, width, alpha_from_hex) # handle extended 4 bytes rgba hex strings
|
||||
# print('preparing hex pen:',name)
|
||||
skipCache = True
|
||||
register = False
|
||||
@ -232,19 +225,20 @@ class ColorRegistry(QtCore.QObject):
|
||||
if desc is False: return None # not a valid brush id
|
||||
name, alpha = desc
|
||||
if name is None:
|
||||
# print('returning blank brush!')
|
||||
return QtGui.QBrush( QtCore.Qt.NoBrush )
|
||||
if name[0] == '#': # skip cache and registry for fixed hex colors
|
||||
# print('preparing hex brush:',name)
|
||||
name, alpha_from_hex = _expand_rgba_hex_string( name )
|
||||
if name is None: return None
|
||||
if alpha is None and alpha_from_hex is not None:
|
||||
# alpha = alpha_from_hex
|
||||
desc = (name, alpha_from_hex) # handle extended 4 bytes rgba hex strings
|
||||
skipCache = True
|
||||
register = False
|
||||
elif name not in self.color_dic:
|
||||
warnings.warn('Unknown color identifier '+str(name)+' enocuntered in brush descriptor.')
|
||||
return None # unknown color identifier
|
||||
if not skipCache and desc in self.brush_cache:
|
||||
# print('using cached brush', desc)
|
||||
return self.brush_cache[desc]
|
||||
# print('making brush!')
|
||||
qbrush = QtGui.QBrush(QtCore.Qt.SolidPattern) # make sure this brush fills once color is set
|
||||
self._update_QBrush(qbrush,desc)
|
||||
if register: self.register( qbrush, desc ) # register for updates on palette change
|
||||
@ -298,7 +292,6 @@ class ColorRegistry(QtCore.QObject):
|
||||
if alpha is not None: qcol.setAlpha(alpha)
|
||||
qbrush.setColor(qcol)
|
||||
# print('= hex:', qbrush.color().name(), qbrush.color().alpha() )
|
||||
|
||||
|
||||
def register(self, obj, desc):
|
||||
"""
|
||||
@ -323,7 +316,6 @@ class ColorRegistry(QtCore.QObject):
|
||||
del self.registered_objects[registration]
|
||||
del obj, desc
|
||||
|
||||
|
||||
def colors(self):
|
||||
""" return current list of colors """
|
||||
return self.color_dic # it would be safer (but slower) to provide only a copy
|
||||
@ -331,7 +323,6 @@ class ColorRegistry(QtCore.QObject):
|
||||
def defaultColors(self):
|
||||
""" return a copy of the default color dictionary """
|
||||
return DEFAULT_COLORS.copy()
|
||||
|
||||
|
||||
def redefinePalette(self, colors=None):
|
||||
"""
|
||||
@ -342,13 +333,13 @@ class ColorRegistry(QtCore.QObject):
|
||||
for key in DEFAULT_COLORS:
|
||||
if key not in colors:
|
||||
raise ValueError("Palette definition is missing '"+str(key)+"'")
|
||||
if DEBUG: print(' ColorRegistry: Setting palette, all color definitions are present.')
|
||||
self.color_dic.clear()
|
||||
self.color_dic.update(colors)
|
||||
|
||||
# notifies named color objects of new assignments:
|
||||
for key in self.registered_objects:
|
||||
ref, desc = self.registered_objects[key]
|
||||
# for key in self.registered_objects:
|
||||
for ref, desc in self.registered_objects.values():
|
||||
# ref, desc = self.registered_objects[key]
|
||||
obj = ref()
|
||||
# print('updating', obj)
|
||||
if obj is None:
|
||||
|
@ -222,44 +222,10 @@ class Color(QtGui.QColor):
|
||||
def colorRegistry():
|
||||
""" Returns the ColorRegistry object managing registered colors """
|
||||
return COLOR_REGISTRY
|
||||
|
||||
# def parseNamedColorSpecification(*args):
|
||||
# """
|
||||
# check if args specify a NamedColor, looking for
|
||||
# 'name' or ('name', alpha) information.
|
||||
# Returns:
|
||||
# ('name', alpha) if a valid name and alpha value is given
|
||||
# ('name', None) if no alpha value is available
|
||||
# ('', None) if an empty name is given, indicating a blank color
|
||||
# None if the specification does not match a NamedColor
|
||||
# """
|
||||
# while len(args) <= 1:
|
||||
# if len(args) == 0:
|
||||
# return None
|
||||
# if len(args) == 1:
|
||||
# arg = args[0]
|
||||
# if isinstance(arg, str):
|
||||
# if len(arg) == 0:
|
||||
# return ('', None) # valid, but blank
|
||||
# if arg[0] == '#':
|
||||
# return None # hexadecimal string not handled as NamedColor
|
||||
# if arg in Colors:
|
||||
# return (arg, None) # valid name, no alpha given
|
||||
# if isinstance(arg, (tuple, list)):
|
||||
# args = arg # promote to top level
|
||||
# else:
|
||||
# return None #numerical values not handled as NamedColor
|
||||
# if len(args) == 2:
|
||||
# if isinstance(arg[0], str):
|
||||
# alpha = arg[1]
|
||||
# if isinstance(alpha, float):
|
||||
# alpha = int(alpha*255) # convert to 0-255 integer
|
||||
# return (arg[0], arg[1]) # return ('name', alpha) tuple
|
||||
# return None # all other cases not handled as NamedColor
|
||||
|
||||
def mkColor(*args):
|
||||
"""
|
||||
Convenience function for constructing QColor from a variety of argument
|
||||
Convenience function for constructing QColor from a variety of argument
|
||||
types. Accepted arguments are:
|
||||
|
||||
================ ===========================================================
|
||||
@ -423,7 +389,7 @@ def mkBrush(*args, **kargs):
|
||||
|
||||
def mkPen(*args, **kargs):
|
||||
"""
|
||||
Convenience function for constructing QPen.
|
||||
Convenience function for constructing QPen.
|
||||
|
||||
Examples::
|
||||
mkPen(QPen)
|
||||
|
@ -984,7 +984,7 @@ class AxisItem(GraphicsWidget):
|
||||
raise TypeError("Line Alpha should be of type None, float or int")
|
||||
|
||||
# tickColor.setAlpha(int(lineAlpha)) # independent copy of color
|
||||
tickPen = QtGui.QPen ( self.pen() )
|
||||
tickPen = QtGui.QPen( self.pen() )
|
||||
tickColor = tickPen.color()
|
||||
tickColor.setAlpha( int(lineAlpha) )
|
||||
tickPen.setColor( tickColor )
|
||||
|
@ -5,7 +5,7 @@ from .GraphicsItem import GraphicsItem
|
||||
from .. import functions as fn
|
||||
|
||||
__all__ = ['GraphicsObject']
|
||||
DEBUG = False
|
||||
DEBUG_REDRAW = False
|
||||
|
||||
class GraphicsObject(GraphicsItem, QtGui.QGraphicsObject):
|
||||
"""
|
||||
@ -19,7 +19,6 @@ class GraphicsObject(GraphicsItem, QtGui.QGraphicsObject):
|
||||
QtGui.QGraphicsObject.__init__(self, *args)
|
||||
self.setFlag(self.ItemSendsGeometryChanges)
|
||||
GraphicsItem.__init__(self)
|
||||
# fn.NAMED_COLOR_MANAGER.paletteChangeSignal.connect(self.styleChange)
|
||||
fn.COLOR_REGISTRY.paletteHasChangedSignal.connect(self.styleHasChanged)
|
||||
|
||||
def itemChange(self, change, value):
|
||||
@ -43,15 +42,9 @@ class GraphicsObject(GraphicsItem, QtGui.QGraphicsObject):
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
# @QT_CORE_SLOT(dict)
|
||||
# def styleChange(self, color_dict):
|
||||
# """ stub function called after Palette.apply(), specific reactions to palette redefinitions execute here """
|
||||
# print('style change request:', self, type(color_dict))
|
||||
|
||||
@QtCore.Slot() # qt.py equates this to pyqtSlot for PyQt
|
||||
def styleHasChanged(self):
|
||||
""" called to trigger redraw after all named colors have been updated """
|
||||
# self._boundingRect = None
|
||||
self.update()
|
||||
if DEBUG: print(' GraphicsObject: redraw after style change:', self)
|
||||
if DEBUG_REDRAW: print(' GraphicsObject: redraw after style change:', self)
|
@ -3,7 +3,7 @@ from .GraphicsItem import GraphicsItem
|
||||
from .. import functions as fn
|
||||
|
||||
__all__ = ['GraphicsWidget']
|
||||
DEBUG = False
|
||||
DEBUG_REDRAW = False
|
||||
|
||||
class GraphicsWidget(GraphicsItem, QtGui.QGraphicsWidget):
|
||||
|
||||
@ -63,4 +63,4 @@ class GraphicsWidget(GraphicsItem, QtGui.QGraphicsWidget):
|
||||
""" called to trigger redraw after all named colors have been updated """
|
||||
# self._boundingRect = None
|
||||
self.update()
|
||||
if DEBUG: print(' GraphicsWidget: redraw after style change:', self)
|
||||
if DEBUG_REDRAW: print(' GraphicsWidget: redraw after style change:', self)
|
||||
|
@ -529,7 +529,7 @@ class PlotCurveItem(GraphicsObject):
|
||||
p.setPen(sp)
|
||||
p.drawPath(path)
|
||||
|
||||
if isinstance(self.opts.get('pen'), QtGui.QPen): # subclass NamedPen also triggers this
|
||||
if isinstance(self.opts.get('pen'), QtGui.QPen):
|
||||
cp = self.opts['pen']
|
||||
else:
|
||||
cp = fn.mkPen(self.opts['pen'])
|
||||
|
@ -21,8 +21,6 @@ from ..python2_3 import basestring
|
||||
|
||||
|
||||
__all__ = ['ScatterPlotItem', 'SpotItem']
|
||||
DEBUG = False
|
||||
|
||||
|
||||
# When pxMode=True for ScatterPlotItem, QPainter.drawPixmap is used for drawing, which
|
||||
# has multiple type signatures. One takes int coordinates of source and target
|
||||
@ -267,7 +265,7 @@ class SymbolAtlas(object):
|
||||
images = []
|
||||
data = []
|
||||
for key, style in styles.items():
|
||||
if DEBUG: print('\nrender:', style[2].color().name(), style[3].color().name(), style)
|
||||
# print('\nrender:', style[2].color().name(), style[3].color().name(), style)
|
||||
img = renderSymbol(*style)
|
||||
arr = fn.imageToArray(img, copy=False, transpose=False)
|
||||
images.append(img) # keep these to delay garbage collection
|
||||
@ -1273,11 +1271,6 @@ class ScatterPlotItem(GraphicsObject):
|
||||
|
||||
def styleHasChanged(self):
|
||||
""" overridden to trigger symbol atlas refresh """
|
||||
if DEBUG:
|
||||
print(' ScatterPlotItem: style update!')
|
||||
print(' pens:',self.data['pen'] )
|
||||
print(' default pen :', self.opts[ 'pen' ].color().name(), self.opts[ 'pen' ] )
|
||||
print(' default brush:', self.opts['brush'].color().name(), self.opts['brush'] )
|
||||
self.fragmentAtlas.clear()
|
||||
self.data['sourceRect'] = (0, 0, 0, 0)
|
||||
self.updateSpots(self.data)
|
||||
|
@ -50,10 +50,9 @@ class TextItem(GraphicsObject):
|
||||
self._lastTransform = None
|
||||
self._lastScene = None
|
||||
self._bounds = QtCore.QRectF()
|
||||
# self.color = None
|
||||
self._color = None
|
||||
self.setColor(color)
|
||||
if html is None:
|
||||
# self.setColor(color)
|
||||
self.setText(text)
|
||||
else:
|
||||
self.setHtml(html)
|
||||
@ -68,7 +67,7 @@ class TextItem(GraphicsObject):
|
||||
This method sets the plain text of the item; see also setHtml().
|
||||
"""
|
||||
if color is not None:
|
||||
self.color = color
|
||||
self._color = color
|
||||
self.setColor(color)
|
||||
self.setPlainText(text)
|
||||
|
||||
@ -140,8 +139,12 @@ class TextItem(GraphicsObject):
|
||||
|
||||
See QtGui.QGraphicsItem.setDefaultTextColor().
|
||||
"""
|
||||
self.color = fn.mkColor(color)
|
||||
self.textItem.setDefaultTextColor(self.color)
|
||||
self._color = fn.mkColor(color)
|
||||
self.textItem.setDefaultTextColor(self._color)
|
||||
|
||||
def color(self):
|
||||
""" returns the current text color """
|
||||
return self._color
|
||||
|
||||
def updateTextPos(self):
|
||||
# update text position to obey anchor
|
||||
@ -220,6 +223,6 @@ class TextItem(GraphicsObject):
|
||||
|
||||
def styleHasChanged(self):
|
||||
""" overridden to mnanually refresh color """
|
||||
if self.color is not None:
|
||||
self.textItem.setDefaultTextColor(self.color)
|
||||
if self._color is not None:
|
||||
self.textItem.setDefaultTextColor(self._color)
|
||||
super().styleHasChanged()
|
||||
|
@ -2,7 +2,6 @@ from . import Qt
|
||||
from .Qt import QtCore, QtGui, QtWidgets
|
||||
|
||||
import numpy as np
|
||||
import math
|
||||
|
||||
from . import functions as fn # namedColorManager
|
||||
from . import colormap
|
||||
|
@ -1,6 +1,6 @@
|
||||
import pyqtgraph as pg
|
||||
from pyqtgraph import functions as fn
|
||||
from pyqtgraph.Qt import QtCore, QtGui
|
||||
from pyqtgraph.Qt import QtGui
|
||||
|
||||
import pytest
|
||||
|
||||
|
@ -14,8 +14,6 @@ from .. import getConfigOption
|
||||
|
||||
__all__ = ['GraphicsView']
|
||||
|
||||
DEBUG = False
|
||||
|
||||
|
||||
class GraphicsView(QtGui.QGraphicsView):
|
||||
"""Re-implementation of QGraphicsView that removes scrollbars and allows unambiguous control of the
|
||||
@ -143,13 +141,8 @@ class GraphicsView(QtGui.QGraphicsView):
|
||||
# background = getConfigOption('background')
|
||||
background = 'gr_bg' # default graphics background color
|
||||
self._background = background # maintained for compatibility
|
||||
if DEBUG: print(' GraphicsView: Generating BG brush for', self._background)
|
||||
self._bgBrush = fn.mkBrush(self._background)
|
||||
if DEBUG: print(' GraphicsView: Background color: ',self._bgBrush.color().name(), self._bgBrush.color().alpha())
|
||||
self.setBackgroundBrush( self._bgBrush )
|
||||
# testBrush = QtGui.QBrush( QtGui.QColor('#000000') )
|
||||
# print(' test brush style:',testBrush.style() )
|
||||
# self.setBackgroundBrush( testBrush )
|
||||
|
||||
def paintEvent(self, ev):
|
||||
self.scene().prepareForPaint()
|
||||
@ -158,8 +151,7 @@ class GraphicsView(QtGui.QGraphicsView):
|
||||
def render(self, *args, **kwds):
|
||||
self.scene().prepareForPaint()
|
||||
return super().render(*args, **kwds)
|
||||
|
||||
|
||||
|
||||
def close(self):
|
||||
self.centralWidget = None
|
||||
self.scene().clear()
|
||||
@ -184,8 +176,7 @@ class GraphicsView(QtGui.QGraphicsView):
|
||||
def keyPressEvent(self, ev):
|
||||
self.scene().keyPressEvent(ev) ## bypass view, hand event directly to scene
|
||||
## (view likes to eat arrow key events)
|
||||
|
||||
|
||||
|
||||
def setCentralItem(self, item):
|
||||
return self.setCentralWidget(item)
|
||||
|
||||
@ -306,9 +297,8 @@ class GraphicsView(QtGui.QGraphicsView):
|
||||
range = QtCore.QRectF(tl.x(), tl.y(), w, h)
|
||||
GraphicsView.setRange(self, range, padding=0)
|
||||
self.sigScaleChanged.connect(image.setScaledMode)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def lockXRange(self, v1):
|
||||
if not v1 in self.lockedViewports:
|
||||
self.lockedViewports.append(v1)
|
||||
@ -415,4 +405,3 @@ class GraphicsView(QtGui.QGraphicsView):
|
||||
""" called to trigger redraw after all named colors have been updated """
|
||||
self.setBackgroundBrush( self._bgBrush )
|
||||
# self.update()
|
||||
if DEBUG: print(' Background update and redraw after style change:', self)
|
||||
|
Loading…
Reference in New Issue
Block a user