diff --git a/examples/crosshair.py b/examples/crosshair.py
index 2479fbe2..fc247442 100644
--- a/examples/crosshair.py
+++ b/examples/crosshair.py
@@ -32,7 +32,7 @@ p1.setAutoVisible(y=True)
#create numpy arrays
-#make the numbers large to show that the xrange shows data from 10000 to all the way 0
+#make the numbers large to show that the range shows data from 10000 to all the way 0
data1 = 10000 + 15000 * pg.gaussianFilter(np.random.random(size=10000), 10) + 3000 * np.random.random(size=10000)
data2 = 15000 + 15000 * pg.gaussianFilter(np.random.random(size=10000), 10) + 3000 * np.random.random(size=10000)
diff --git a/examples/hdf5.py b/examples/hdf5.py
index 2ff89947..764edabc 100644
--- a/examples/hdf5.py
+++ b/examples/hdf5.py
@@ -51,9 +51,9 @@ class HDF5Plot(pg.PlotCurveItem):
return # no ViewBox yet
# Determine what data range must be read from HDF5
- xrange = vb.viewRange()[0]
- start = max(0,int(xrange[0])-1)
- stop = min(len(self.hdf5), int(xrange[1]+2))
+ range_ = vb.viewRange()[0]
+ start = max(0,int(range_[0])-1)
+ stop = min(len(self.hdf5), int(range_[1]+2))
# Decide by how much we should downsample
ds = int((stop-start) / self.limit) + 1
diff --git a/examples/parallelize.py b/examples/parallelize.py
index b309aa31..9fff8e42 100644
--- a/examples/parallelize.py
+++ b/examples/parallelize.py
@@ -5,7 +5,6 @@ import time
import numpy as np
import pyqtgraph.multiprocess as mp
import pyqtgraph as pg
-from pyqtgraph.python2_3 import xrange
print( "\n=================\nParallelize")
@@ -32,7 +31,7 @@ start = time.time()
with pg.ProgressDialog('processing serially..', maximum=len(tasks)) as dlg:
for i, x in enumerate(tasks):
tot = 0
- for j in xrange(size):
+ for j in range(size):
tot += j * x
results[i] = tot
dlg += 1
@@ -46,7 +45,7 @@ start = time.time()
with mp.Parallelize(enumerate(tasks), results=results2, workers=1, progressDialog='processing serially (using Parallelizer)..') as tasker:
for i, x in tasker:
tot = 0
- for j in xrange(size):
+ for j in range(size):
tot += j * x
tasker.results[i] = tot
print( "\nParallel time, 1 worker: %0.2f" % (time.time() - start))
@@ -57,9 +56,8 @@ start = time.time()
with mp.Parallelize(enumerate(tasks), results=results3, progressDialog='processing in parallel..') as tasker:
for i, x in tasker:
tot = 0
- for j in xrange(size):
+ for j in range(size):
tot += j * x
tasker.results[i] = tot
print( "\nParallel time, %d workers: %0.2f" % (mp.Parallelize.suggestedWorkerCount(), time.time() - start))
print( "Results match serial: %s" % str(results3 == results))
-
diff --git a/examples/relativity/relativity.py b/examples/relativity/relativity.py
index d4c2eaa6..62a78e40 100644
--- a/examples/relativity/relativity.py
+++ b/examples/relativity/relativity.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
import numpy as np
import collections
import sys, os
@@ -6,7 +7,6 @@ from pyqtgraph.Qt import QtGui, QtCore
from pyqtgraph.parametertree import Parameter, ParameterTree
from pyqtgraph.parametertree import types as pTypes
import pyqtgraph.configfile
-from pyqtgraph.python2_3 import xrange
from time import perf_counter
@@ -520,7 +520,7 @@ class Simulation:
dt = self.dt
tVals = np.linspace(0, dt*(nPts-1), nPts)
for cl in self.clocks.values():
- for i in xrange(1,nPts):
+ for i in range(1,nPts):
nextT = tVals[i]
while True:
tau1, tau2 = cl.accelLimits()
@@ -566,7 +566,7 @@ class Simulation:
## These are the set of proper times (in the reference frame) that will be simulated
ptVals = np.linspace(ref.pt, ref.pt + dt*(nPts-1), nPts)
- for i in xrange(1,nPts):
+ for i in range(1,nPts):
## step reference clock ahead one time step in its proper time
nextPt = ptVals[i] ## this is where (when) we want to end up
diff --git a/pyqtgraph/Qt/__init__.py b/pyqtgraph/Qt/__init__.py
index cf286d67..0a2431d6 100644
--- a/pyqtgraph/Qt/__init__.py
+++ b/pyqtgraph/Qt/__init__.py
@@ -12,7 +12,6 @@ This module exists to smooth out some of the differences between PySide and PyQt
import os, sys, re, time, subprocess, warnings
-from ..python2_3 import asUnicode
PYSIDE = 'PySide'
PYSIDE2 = 'PySide2'
@@ -73,7 +72,7 @@ class _StringIO(object):
self.data.append(data)
def getvalue(self):
- return ''.join(map(asUnicode, self.data)).encode('utf8')
+ return ''.join(map(str, self.data)).encode('utf8')
def _loadUiType(uiFile):
diff --git a/pyqtgraph/WidgetGroup.py b/pyqtgraph/WidgetGroup.py
index c993882e..6a66bd20 100644
--- a/pyqtgraph/WidgetGroup.py
+++ b/pyqtgraph/WidgetGroup.py
@@ -10,7 +10,6 @@ of a large group of widgets.
from .Qt import QtCore, QtGui
import weakref, inspect
-from .python2_3 import asUnicode
__all__ = ['WidgetGroup']
@@ -45,7 +44,7 @@ def comboState(w):
except AttributeError:
pass
if data is None:
- return asUnicode(w.itemText(ind))
+ return str(w.itemText(ind))
else:
return data
diff --git a/pyqtgraph/__init__.py b/pyqtgraph/__init__.py
index 9c326bed..a3543740 100644
--- a/pyqtgraph/__init__.py
+++ b/pyqtgraph/__init__.py
@@ -9,7 +9,7 @@ __version__ = '0.12.2'
### import all the goodies and add some helper functions for easy CLI use
## 'Qt' is a local module; it is intended mainly to cover up the differences
-## between PyQt4 and PySide.
+## between PyQt and PySide.
from .Qt import QtCore, QtGui, mkQApp
from .Qt import exec_ as exec
@@ -22,14 +22,6 @@ import numpy ## pyqtgraph requires numpy
import os, sys
-## check python version
-## Allow anything >= 2.7
-if sys.version_info[0] < 2 or (sys.version_info[0] == 2 and sys.version_info[1] < 6):
- raise Exception("Pyqtgraph requires Python version 2.6 or greater (this is %d.%d)" % (sys.version_info[0], sys.version_info[1]))
-
-## helpers for 2/3 compatibility
-from . import python2_3
-
## in general openGL is poorly supported with Qt+GraphicsView.
## we only enable it where the performance benefit is critical.
## Note this only applies to 2D graphics; 3D graphics always use OpenGL.
@@ -282,7 +274,6 @@ from .ThreadsafeTimer import *
# indirect imports used within library
from .GraphicsScene import GraphicsScene
-from .python2_3 import asUnicode
from .util.cupy_helper import getCupy
# indirect imports known to be used outside of the library
diff --git a/pyqtgraph/configfile.py b/pyqtgraph/configfile.py
index 674c1620..69832710 100644
--- a/pyqtgraph/configfile.py
+++ b/pyqtgraph/configfile.py
@@ -14,7 +14,6 @@ import numpy
from collections import OrderedDict
import tempfile
from . import units
-from .python2_3 import asUnicode, basestring
from .Qt import QtCore
from .Point import Point
from .colormap import ColorMap
@@ -40,7 +39,7 @@ class ParseError(Exception):
def writeConfigFile(data, fname):
s = genString(data)
- with open(fname, 'w') as fd:
+ with open(fname, 'wt') as fd:
fd.write(s)
@@ -56,8 +55,8 @@ def readConfigFile(fname):
try:
#os.chdir(newDir) ## bad.
- with open(fname) as fd:
- s = asUnicode(fd.read())
+ with open(fname, "rt") as fd:
+ s = fd.read()
s = s.replace("\r\n", "\n")
s = s.replace("\r", "\n")
data = parseString(s)[1]
@@ -73,7 +72,7 @@ def readConfigFile(fname):
def appendConfigFile(data, fname):
s = genString(data)
- with open(fname, 'a') as fd:
+ with open(fname, 'at') as fd:
fd.write(s)
@@ -97,7 +96,7 @@ def genString(data, indent=''):
def parseString(lines, start=0):
data = OrderedDict()
- if isinstance(lines, basestring):
+ if isinstance(lines, str):
lines = lines.replace("\\\n", "")
lines = lines.split('\n')
lines = [l for l in lines if re.search(r'\S', l) and not re.match(r'\s*#', l)] ## remove empty lines
diff --git a/pyqtgraph/console/CmdInput.py b/pyqtgraph/console/CmdInput.py
index 83de64de..751bd4ec 100644
--- a/pyqtgraph/console/CmdInput.py
+++ b/pyqtgraph/console/CmdInput.py
@@ -1,5 +1,5 @@
+# -*- coding: utf-8 -*-
from ..Qt import QtCore, QtGui
-from ..python2_3 import asUnicode
class CmdInput(QtGui.QLineEdit):
@@ -25,10 +25,10 @@ class CmdInput(QtGui.QLineEdit):
self.execCmd()
else:
super().keyPressEvent(ev)
- self.history[0] = asUnicode(self.text())
+ self.history[0] = self.text()
def execCmd(self):
- cmd = asUnicode(self.text())
+ cmd = self.text()
if len(self.history) == 1 or cmd != self.history[1]:
self.history.insert(1, cmd)
self.history[0] = ""
diff --git a/pyqtgraph/console/Console.py b/pyqtgraph/console/Console.py
index c8b045f2..6261ecb9 100644
--- a/pyqtgraph/console/Console.py
+++ b/pyqtgraph/console/Console.py
@@ -3,7 +3,6 @@ import sys, re, traceback, subprocess
import pickle
from ..Qt import QtCore, QtGui, QT_LIB
-from ..python2_3 import basestring
from .. import exceptionHandling as exceptionHandling
from .. import getConfigOption
from ..functions import SignalBlock
@@ -454,7 +453,7 @@ class ConsoleWidget(QtGui.QWidget):
if filterStr != '':
if isinstance(exc, Exception):
msg = traceback.format_exception_only(type(exc), exc)
- elif isinstance(exc, basestring):
+ elif isinstance(exc, str):
msg = exc
else:
msg = repr(exc)
diff --git a/pyqtgraph/dockarea/Dock.py b/pyqtgraph/dockarea/Dock.py
index 1f6ca711..a6807d7d 100644
--- a/pyqtgraph/dockarea/Dock.py
+++ b/pyqtgraph/dockarea/Dock.py
@@ -3,7 +3,6 @@ from ..Qt import QtCore, QtGui
from .DockDrop import *
from ..widgets.VerticalLabel import VerticalLabel
-from ..python2_3 import asUnicode
class Dock(QtGui.QWidget, DockDrop):
@@ -125,7 +124,7 @@ class Dock(QtGui.QWidget, DockDrop):
"""
Gets the text displayed in the title bar for this dock.
"""
- return asUnicode(self.label.text())
+ return self.label.text()
def setTitle(self, text):
"""
diff --git a/pyqtgraph/dockarea/DockArea.py b/pyqtgraph/dockarea/DockArea.py
index 86538f75..503a8468 100644
--- a/pyqtgraph/dockarea/DockArea.py
+++ b/pyqtgraph/dockarea/DockArea.py
@@ -4,7 +4,6 @@ from ..Qt import QtGui
from .Container import *
from .DockDrop import *
from .Dock import Dock
-from ..python2_3 import basestring
class DockArea(Container, QtGui.QWidget, DockDrop):
@@ -61,7 +60,7 @@ class DockArea(Container, QtGui.QWidget, DockDrop):
container = self.topContainer
neighbor = None
else:
- if isinstance(relativeTo, basestring):
+ if isinstance(relativeTo, str):
relativeTo = self.docks[relativeTo]
container = self.getContainer(relativeTo)
if container is None:
diff --git a/pyqtgraph/exporters/CSVExporter.py b/pyqtgraph/exporters/CSVExporter.py
index 26825466..a134e788 100644
--- a/pyqtgraph/exporters/CSVExporter.py
+++ b/pyqtgraph/exporters/CSVExporter.py
@@ -3,7 +3,6 @@ from ..Qt import QtCore
from .Exporter import Exporter
from ..parametertree import Parameter
from .. import PlotItem
-from ..python2_3 import asUnicode
translate = QtCore.QCoreApplication.translate
@@ -60,7 +59,7 @@ class CSVExporter(Exporter):
sep = '\t'
with open(fileName, 'w') as fd:
- fd.write(sep.join(map(asUnicode, header)) + '\n')
+ fd.write(sep.join(map(str, header)) + '\n')
i = 0
numFormat = '%%0.%dg' % self.params['precision']
numRows = max([len(d[0]) for d in data])
diff --git a/pyqtgraph/exporters/Exporter.py b/pyqtgraph/exporters/Exporter.py
index ca3cd606..4a582d33 100644
--- a/pyqtgraph/exporters/Exporter.py
+++ b/pyqtgraph/exporters/Exporter.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
from ..widgets.FileDialog import FileDialog
from ..Qt import QtGui, QtCore
-from ..python2_3 import asUnicode, basestring
from ..GraphicsScene import GraphicsScene
import os, re
LastExportDirectory = None
@@ -49,7 +48,7 @@ class Exporter(object):
self.fileDialog.setFileMode(QtGui.QFileDialog.FileMode.AnyFile)
self.fileDialog.setAcceptMode(QtGui.QFileDialog.AcceptMode.AcceptSave)
if filter is not None:
- if isinstance(filter, basestring):
+ if isinstance(filter, str):
self.fileDialog.setNameFilter(filter)
elif isinstance(filter, list):
self.fileDialog.setNameFilters(filter)
@@ -63,13 +62,12 @@ class Exporter(object):
return
def fileSaveFinished(self, fileName):
- fileName = asUnicode(fileName)
global LastExportDirectory
LastExportDirectory = os.path.split(fileName)[0]
## If file name does not match selected extension, append it now
ext = os.path.splitext(fileName)[1].lower().lstrip('.')
- selectedExt = re.search(r'\*\.(\w+)\b', asUnicode(self.fileDialog.selectedNameFilter()))
+ selectedExt = re.search(r'\*\.(\w+)\b', self.fileDialog.selectedNameFilter())
if selectedExt is not None:
selectedExt = selectedExt.groups()[0].lower()
if ext != selectedExt:
diff --git a/pyqtgraph/exporters/SVGExporter.py b/pyqtgraph/exporters/SVGExporter.py
index 3dc12b2c..a4b84b65 100644
--- a/pyqtgraph/exporters/SVGExporter.py
+++ b/pyqtgraph/exporters/SVGExporter.py
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
from .Exporter import Exporter
-from ..python2_3 import asUnicode
from ..parametertree import Parameter
from ..Qt import QtGui, QtCore, QtSvg
from .. import debug
@@ -79,7 +78,7 @@ class SVGExporter(Exporter):
QtGui.QApplication.clipboard().setMimeData(md)
else:
with open(fileName, 'wb') as fh:
- fh.write(asUnicode(xml).encode('utf-8'))
+ fh.write(str(xml).encode('utf-8'))
# Includes space for extra attributes
xmlHeader = """\
diff --git a/pyqtgraph/flowchart/Flowchart.py b/pyqtgraph/flowchart/Flowchart.py
index e735cab7..2e0148dc 100644
--- a/pyqtgraph/flowchart/Flowchart.py
+++ b/pyqtgraph/flowchart/Flowchart.py
@@ -17,7 +17,6 @@ from .. import configfile as configfile
from .. import dockarea as dockarea
from . import FlowchartGraphicsView
from .. import functions as fn
-from ..python2_3 import asUnicode
def strDict(d):
return dict([(str(k), v) for k, v in d.items()])
@@ -512,7 +511,6 @@ class Flowchart(Node):
self.fileDialog.fileSelected.connect(self.loadFile)
return
## NOTE: was previously using a real widget for the file dialog's parent, but this caused weird mouse event bugs..
- fileName = asUnicode(fileName)
state = configfile.readConfigFile(fileName)
self.restoreState(state, clear=True)
self.viewBox.autoRange()
@@ -532,7 +530,6 @@ class Flowchart(Node):
self.fileDialog.show()
self.fileDialog.fileSelected.connect(self.saveFile)
return
- fileName = asUnicode(fileName)
configfile.writeConfigFile(self.saveState(), fileName)
self.sigFileSaved.emit(fileName)
@@ -653,7 +650,7 @@ class FlowchartCtrlWidget(QtGui.QWidget):
#self.setCurrentFile(newFile)
def fileSaved(self, fileName):
- self.setCurrentFile(asUnicode(fileName))
+ self.setCurrentFile(fileName)
self.ui.saveBtn.success("Saved.")
def saveClicked(self):
@@ -682,7 +679,7 @@ class FlowchartCtrlWidget(QtGui.QWidget):
#self.setCurrentFile(newFile)
def setCurrentFile(self, fileName):
- self.currentFileName = asUnicode(fileName)
+ self.currentFileName = fileName
if fileName is None:
self.ui.fileNameLabel.setText("[ new ]")
else:
diff --git a/pyqtgraph/flowchart/library/Filters.py b/pyqtgraph/flowchart/library/Filters.py
index 1bd4dec2..3ced7f67 100644
--- a/pyqtgraph/flowchart/library/Filters.py
+++ b/pyqtgraph/flowchart/library/Filters.py
@@ -3,7 +3,6 @@ import numpy as np
from . import functions
from ... import functions as pgfn
from .common import *
-from ...python2_3 import xrange
from ... import PolyLineROI
from ... import Point
from ... import metaarray as metaarray
@@ -320,7 +319,7 @@ class RemovePeriodic(CtrlNode):
## flatten spikes at f0 and harmonics
f0 = self.ctrls['f0'].value()
- for i in xrange(1, self.ctrls['harmonics'].value()+2):
+ for i in range(1, self.ctrls['harmonics'].value()+2):
f = f0 * i # target frequency
## determine index range to check for this frequency
diff --git a/pyqtgraph/flowchart/library/functions.py b/pyqtgraph/flowchart/library/functions.py
index a50aeaca..0e951a3c 100644
--- a/pyqtgraph/flowchart/library/functions.py
+++ b/pyqtgraph/flowchart/library/functions.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
import numpy as np
from ...metaarray import MetaArray
-from ...python2_3 import xrange
def downsample(data, n, axis=0, xvals='subsample'):
@@ -308,7 +307,7 @@ def suggestDType(x):
return float
elif isinstance(x, int):
return int
- #elif isinstance(x, basestring): ## don't try to guess correct string length; use object instead.
+ #elif isinstance(x, str): ## don't try to guess correct string length; use object instead.
#return ' 0:
if s[-len(suffix):] != suffix:
@@ -253,7 +251,7 @@ def mkColor(*args):
"""
err = 'Not sure how to make a color from "%s"' % str(args)
if len(args) == 1:
- if isinstance(args[0], basestring):
+ if isinstance(args[0], str):
c = args[0]
if len(c) == 1:
try:
@@ -2197,9 +2195,9 @@ def arrayToQPolygonF(x, y):
#index = tetFields[0] + tetFields[1]*2 + tetFields[2]*4 + tetFields[3]*8
### add facets
- #for i in xrange(index.shape[0]): # data x-axis
- #for j in xrange(index.shape[1]): # data y-axis
- #for k in xrange(index.shape[2]): # data z-axis
+ #for i in range(index.shape[0]): # data x-axis
+ #for j in range(index.shape[1]): # data y-axis
+ #for k in range(index.shape[2]): # data z-axis
#for f in indexFacets[index[i,j,k]]: # faces to generate for this tet
#pts = []
#for l in [0,1,2]: # points in this face
diff --git a/pyqtgraph/graphicsItems/AxisItem.py b/pyqtgraph/graphicsItems/AxisItem.py
index cf98d6ec..def1e28d 100644
--- a/pyqtgraph/graphicsItems/AxisItem.py
+++ b/pyqtgraph/graphicsItems/AxisItem.py
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
from ..Qt import QtGui, QtCore
-from ..python2_3 import asUnicode
import numpy as np
from ..Point import Point
from .. import debug as debug
@@ -314,16 +313,15 @@ class AxisItem(GraphicsWidget):
if not self.autoSIPrefix or self.autoSIPrefixScale == 1.0:
units = ''
else:
- units = asUnicode('(x%g)') % (1.0/self.autoSIPrefixScale)
+ units = '(x%g)' % (1.0/self.autoSIPrefixScale)
else:
- #print repr(self.labelUnitPrefix), repr(self.labelUnits)
- units = asUnicode('(%s%s)') % (asUnicode(self.labelUnitPrefix), asUnicode(self.labelUnits))
+ units = '(%s%s)' % (self.labelUnitPrefix, self.labelUnits)
- s = asUnicode('%s %s') % (asUnicode(self.labelText), asUnicode(units))
+ s = '%s %s' % (self.labelText, units)
style = ';'.join(['%s: %s' % (k, self.labelStyle[k]) for k in self.labelStyle])
- return asUnicode("%s") % (style, asUnicode(s))
+ return "%s" % (style, s)
def _updateMaxTextSize(self, x):
## Informs that the maximum tick size orthogonal to the axis has
@@ -1070,7 +1068,7 @@ class AxisItem(GraphicsWidget):
if s is None:
rects.append(None)
else:
- br = p.boundingRect(QtCore.QRectF(0, 0, 100, 100), QtCore.Qt.AlignmentFlag.AlignCenter, asUnicode(s))
+ br = p.boundingRect(QtCore.QRectF(0, 0, 100, 100), QtCore.Qt.AlignmentFlag.AlignCenter, s)
## boundingRect is usually just a bit too large
## (but this probably depends on per-font metrics?)
br.setHeight(br.height() * 0.8)
@@ -1112,7 +1110,6 @@ class AxisItem(GraphicsWidget):
vstr = strings[j]
if vstr is None: ## this tick was ignored because it is out of bounds
continue
- vstr = asUnicode(vstr)
x = tickPositions[i][j]
#textRect = p.boundingRect(QtCore.QRectF(0, 0, 100, 100), QtCore.Qt.AlignmentFlag.AlignCenter, vstr)
textRect = rects[j]
diff --git a/pyqtgraph/graphicsItems/PlotDataItem.py b/pyqtgraph/graphicsItems/PlotDataItem.py
index 0c6b68a8..75655175 100644
--- a/pyqtgraph/graphicsItems/PlotDataItem.py
+++ b/pyqtgraph/graphicsItems/PlotDataItem.py
@@ -1041,7 +1041,7 @@ def isSequence(obj):
##print rec1, dtype
#arr = np.empty(len(self), dtype=dtype)
#arr[0] = tuple(rec1.values())
- #for i in xrange(1, len(self)):
+ #for i in range(1, len(self)):
#arr[i] = tuple(self[i].values())
#return arr
@@ -1052,7 +1052,7 @@ def isSequence(obj):
#return self.data[arg]
#def __getitem__list(self, arg):
- #if isinstance(arg, basestring):
+ #if isinstance(arg, str):
#return [d.get(arg, None) for d in self.data]
#elif isinstance(arg, int):
#return self.data[arg]
@@ -1063,7 +1063,7 @@ def isSequence(obj):
#raise TypeError(type(arg))
#def __getitem__dict(self, arg):
- #if isinstance(arg, basestring):
+ #if isinstance(arg, str):
#return self.data[arg]
#elif isinstance(arg, int):
#return dict([(k, v[arg]) for k, v in self.data.items()])
@@ -1080,7 +1080,7 @@ def isSequence(obj):
#self.data[arg] = val
#def __setitem__list(self, arg, val):
- #if isinstance(arg, basestring):
+ #if isinstance(arg, str):
#if len(val) != len(self.data):
#raise Exception("Values (%d) and data set (%d) are not the same length." % (len(val), len(self.data)))
#for i, rec in enumerate(self.data):
@@ -1094,7 +1094,7 @@ def isSequence(obj):
#raise TypeError(type(arg))
#def __setitem__dict(self, arg, val):
- #if isinstance(arg, basestring):
+ #if isinstance(arg, str):
#if len(val) != len(self.data[arg]):
#raise Exception("Values (%d) and data set (%d) are not the same length." % (len(val), len(self.data[arg])))
#self.data[arg] = val
@@ -1109,13 +1109,13 @@ def isSequence(obj):
#def _orderArgs(self, args):
### return args in (int, str) order
- #if isinstance(args[0], basestring):
+ #if isinstance(args[0], str):
#return (args[1], args[0])
#else:
#return args
#def __iter__(self):
- #for i in xrange(len(self)):
+ #for i in range(len(self)):
#yield self[i]
#def __len__(self):
diff --git a/pyqtgraph/graphicsItems/PlotItem/PlotItem.py b/pyqtgraph/graphicsItems/PlotItem/PlotItem.py
index d3e163b1..d8b9893f 100644
--- a/pyqtgraph/graphicsItems/PlotItem/PlotItem.py
+++ b/pyqtgraph/graphicsItems/PlotItem/PlotItem.py
@@ -21,7 +21,6 @@ from ... import functions as fn
from ... import icons
from ...Qt import QtGui, QtCore, QT_LIB
from ...WidgetGroup import WidgetGroup
-from ...python2_3 import basestring
from ...widgets.FileDialog import FileDialog
translate = QtCore.QCoreApplication.translate
@@ -252,7 +251,7 @@ class PlotItem(GraphicsWidget):
labels[label] = kargs[label]
del kargs[label]
for k in labels:
- if isinstance(labels[k], basestring):
+ if isinstance(labels[k], str):
labels[k] = (labels[k],)
self.setLabel(k, *labels[k])
@@ -1133,7 +1132,7 @@ class PlotItem(GraphicsWidget):
if k == 'title':
self.setTitle(v)
else:
- if isinstance(v, basestring):
+ if isinstance(v, str):
v = (v,)
self.setLabel(k, *v)
diff --git a/pyqtgraph/graphicsItems/ViewBox/ViewBox.py b/pyqtgraph/graphicsItems/ViewBox/ViewBox.py
index 915390bd..fae4a19b 100644
--- a/pyqtgraph/graphicsItems/ViewBox/ViewBox.py
+++ b/pyqtgraph/graphicsItems/ViewBox/ViewBox.py
@@ -5,7 +5,6 @@ import math
from copy import deepcopy
import numpy as np
from ...Qt import QtGui, QtCore
-from ...python2_3 import basestring
from ...Point import Point
from ... import functions as fn
from .. ItemGroup import ItemGroup
@@ -306,7 +305,7 @@ class ViewBox(GraphicsWidget):
for v in state['linkedViews']:
if isinstance(v, weakref.ref):
v = v()
- if v is None or isinstance(v, basestring):
+ if v is None or isinstance(v, str):
views.append(v)
else:
views.append(v.name)
@@ -936,7 +935,7 @@ class ViewBox(GraphicsWidget):
Link X or Y axes of two views and unlink any previously connected axes. *axis* must be ViewBox.XAxis or ViewBox.YAxis.
If view is None, the axis is left unlinked.
"""
- if isinstance(view, basestring):
+ if isinstance(view, str):
if view == '':
view = None
else:
@@ -964,7 +963,7 @@ class ViewBox(GraphicsWidget):
pass
- if view is None or isinstance(view, basestring):
+ if view is None or isinstance(view, str):
self.state['linkedViews'][axis] = view
else:
self.state['linkedViews'][axis] = weakref.ref(view)
@@ -997,7 +996,7 @@ class ViewBox(GraphicsWidget):
## Return the linked view for axis *ax*.
## this method _always_ returns either a ViewBox or None.
v = self.state['linkedViews'][ax]
- if v is None or isinstance(v, basestring):
+ if v is None or isinstance(v, str):
return None
else:
return v() ## dereference weakref pointer. If the reference is dead, this returns None
@@ -1642,7 +1641,7 @@ class ViewBox(GraphicsWidget):
for ax in [0,1]:
link = self.state['linkedViews'][ax]
- if isinstance(link, basestring): ## axis has not been linked yet; see if it's possible now
+ if isinstance(link, str): ## axis has not been linked yet; see if it's possible now
for v in nv:
if link == v.name:
self.linkView(ax, v)
diff --git a/pyqtgraph/graphicsItems/ViewBox/ViewBoxMenu.py b/pyqtgraph/graphicsItems/ViewBox/ViewBoxMenu.py
index 51138129..9e955c94 100644
--- a/pyqtgraph/graphicsItems/ViewBox/ViewBoxMenu.py
+++ b/pyqtgraph/graphicsItems/ViewBox/ViewBoxMenu.py
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
from ...Qt import QtCore, QtGui, QT_LIB
-from ...python2_3 import asUnicode
from ...WidgetGroup import WidgetGroup
import importlib
@@ -238,7 +237,7 @@ class ViewBoxMenu(QtGui.QMenu):
for i in [0,1]:
c = self.ctrl[i].linkCombo
- current = asUnicode(c.currentText())
+ current = c.currentText()
c.blockSignals(True)
changed = True
try:
diff --git a/pyqtgraph/metaarray/MetaArray.py b/pyqtgraph/metaarray/MetaArray.py
index 7d852ec7..d4441dd2 100644
--- a/pyqtgraph/metaarray/MetaArray.py
+++ b/pyqtgraph/metaarray/MetaArray.py
@@ -13,7 +13,6 @@ More info at http://www.scipy.org/Cookbook/MetaArray
import copy, os
import pickle
import numpy as np
-from ..python2_3 import basestring
import warnings
@@ -121,7 +120,7 @@ class MetaArray(object):
defaultCompression = None
## Types allowed as axis or column names
- nameTypes = [basestring, tuple]
+ nameTypes = [str, tuple]
@staticmethod
def isNameType(var):
return any(isinstance(var, t) for t in MetaArray.nameTypes)
@@ -412,7 +411,7 @@ class MetaArray(object):
if type(axis) == int:
ind = [slice(None)]*axis
ind.append(order)
- elif isinstance(axis, basestring):
+ elif isinstance(axis, str):
ind = (slice(axis, order),)
return self[tuple(ind)]
@@ -469,7 +468,7 @@ class MetaArray(object):
return tuple(nInd)
def _interpretAxis(self, axis):
- if isinstance(axis, basestring) or isinstance(axis, tuple):
+ if isinstance(axis, (str, tuple)):
return self._getAxis(axis)
else:
return axis
@@ -937,7 +936,7 @@ class MetaArray(object):
val = root.attrs[k]
if isinstance(val, bytes):
val = val.decode()
- if isinstance(val, basestring): ## strings need to be re-evaluated to their original types
+ if isinstance(val, str): ## strings need to be re-evaluated to their original types
try:
val = eval(val)
except:
diff --git a/pyqtgraph/multiprocess/parallelizer.py b/pyqtgraph/multiprocess/parallelizer.py
index b0f064bd..26a3c164 100644
--- a/pyqtgraph/multiprocess/parallelizer.py
+++ b/pyqtgraph/multiprocess/parallelizer.py
@@ -2,7 +2,6 @@
import os, sys, time, multiprocessing, re
from .processes import ForkedProcess
from .remoteproxy import ClosedError
-from ..python2_3 import basestring, xrange
class CanceledError(Exception):
@@ -64,7 +63,7 @@ class Parallelize(object):
self.showProgress = False
if progressDialog is not None:
self.showProgress = True
- if isinstance(progressDialog, basestring):
+ if isinstance(progressDialog, str):
progressDialog = {'labelText': progressDialog}
from ..widgets.ProgressDialog import ProgressDialog
self.progressDlg = ProgressDialog(**progressDialog)
@@ -120,7 +119,7 @@ class Parallelize(object):
## break up tasks into one set per worker
workers = self.workers
- chunks = [[] for i in xrange(workers)]
+ chunks = [[] for i in range(workers)]
i = 0
for i in range(len(self.tasks)):
chunks[i%workers].append(self.tasks[i])
diff --git a/pyqtgraph/opengl/MeshData.py b/pyqtgraph/opengl/MeshData.py
index 8aac31f8..73c99052 100644
--- a/pyqtgraph/opengl/MeshData.py
+++ b/pyqtgraph/opengl/MeshData.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
import numpy as np
from ..Qt import QtGui
-from ..python2_3 import xrange
class MeshData(object):
@@ -209,7 +208,7 @@ class MeshData(object):
faceNorms = self.faceNormals()
vertFaces = self.vertexFaces()
self._vertexNormals = np.empty(self._vertexes.shape, dtype=float)
- for vindex in xrange(self._vertexes.shape[0]):
+ for vindex in range(self._vertexes.shape[0]):
faces = vertFaces[vindex]
if len(faces) == 0:
self._vertexNormals[vindex] = (0,0,0)
@@ -318,7 +317,7 @@ class MeshData(object):
self._vertexFaces = []
self._faceNormals = None
self._vertexNormals = None
- for i in xrange(faces.shape[0]):
+ for i in range(faces.shape[0]):
face = faces[i]
inds = []
for j in range(face.shape[0]):
@@ -350,8 +349,8 @@ class MeshData(object):
Return list mapping each vertex index to a list of face indexes that use the vertex.
"""
if self._vertexFaces is None:
- self._vertexFaces = [[] for i in xrange(len(self.vertexes()))]
- for i in xrange(self._faces.shape[0]):
+ self._vertexFaces = [[] for i in range(len(self.vertexes()))]
+ for i in range(self._faces.shape[0]):
face = self._faces[i]
for ind in face:
self._vertexFaces[ind].append(i)
diff --git a/pyqtgraph/parametertree/Parameter.py b/pyqtgraph/parametertree/Parameter.py
index b123d192..0fa7571e 100644
--- a/pyqtgraph/parametertree/Parameter.py
+++ b/pyqtgraph/parametertree/Parameter.py
@@ -3,7 +3,6 @@ from .. import functions as fn
from ..Qt import QtCore
import weakref, re
from collections import OrderedDict
-from ..python2_3 import asUnicode, basestring
from .ParameterItem import ParameterItem
import warnings
@@ -190,7 +189,7 @@ class Parameter(QtCore.QObject):
self.blockTreeChangeEmit = 0
#self.monitoringChildren = False ## prevent calling monitorChildren more than once
- if not isinstance(name, basestring):
+ if not isinstance(name, str):
raise Exception("Parameter must have a string name specified in opts.")
self.setName(name)
@@ -701,7 +700,7 @@ class Parameter(QtCore.QObject):
param[('child', 'grandchild')] = value
"""
- if isinstance(names, basestring):
+ if isinstance(names, str):
names = (names,)
return self.param(*names).setValue(value)
@@ -730,7 +729,7 @@ class Parameter(QtCore.QObject):
return self.child(*names)
def __repr__(self):
- return asUnicode("<%s '%s' at 0x%x>") % (self.__class__.__name__, self.name(), id(self))
+ return "<%s '%s' at 0x%x>" % (self.__class__.__name__, self.name(), id(self))
def __getattr__(self, attr):
## Leaving this undocumented because I might like to remove it in the future..
diff --git a/pyqtgraph/parametertree/ParameterItem.py b/pyqtgraph/parametertree/ParameterItem.py
index 1b4924b2..cff56484 100644
--- a/pyqtgraph/parametertree/ParameterItem.py
+++ b/pyqtgraph/parametertree/ParameterItem.py
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
from ..Qt import QtGui, QtCore
-from ..python2_3 import asUnicode
translate = QtCore.QCoreApplication.translate
@@ -138,7 +137,7 @@ class ParameterItem(QtGui.QTreeWidgetItem):
if self.ignoreNameColumnChange:
return
try:
- newName = self.param.setName(asUnicode(self.text(col)))
+ newName = self.param.setName(str(self.text(col)))
except Exception:
self.setText(0, self.param.name())
raise
diff --git a/pyqtgraph/parametertree/parameterTypes.py b/pyqtgraph/parametertree/parameterTypes.py
index 0b69c217..b810948d 100644
--- a/pyqtgraph/parametertree/parameterTypes.py
+++ b/pyqtgraph/parametertree/parameterTypes.py
@@ -1,5 +1,5 @@
+# -*- coding: utf-8 -*-
from ..Qt import QtCore, QtGui, QtWidgets, QT_LIB
-from ..python2_3 import asUnicode
from .Parameter import Parameter, registerParameterType
from .ParameterItem import ParameterItem
from ..widgets.SpinBox import SpinBox
@@ -146,8 +146,8 @@ class WidgetParameterItem(ParameterItem):
w = QtWidgets.QLineEdit()
w.setStyleSheet('border: 0px')
w.sigChanged = w.editingFinished
- w.value = lambda: asUnicode(w.text())
- w.setValue = lambda v: w.setText(asUnicode(v))
+ w.value = w.text
+ w.setValue = w.setText
w.sigChanging = w.textChanged
elif t == 'color':
w = ColorButton()
@@ -168,7 +168,7 @@ class WidgetParameterItem(ParameterItem):
self.hideWidget = False
self.asSubItem = True
else:
- raise Exception("Unknown type '%s'" % asUnicode(t))
+ raise Exception("Unknown type '%s'" % str(t))
return w
def widgetEventFilter(self, obj, ev):
@@ -231,11 +231,11 @@ class WidgetParameterItem(ParameterItem):
value = self.param.value()
opts = self.param.opts
if isinstance(self.widget, QtWidgets.QAbstractSpinBox):
- text = asUnicode(self.widget.lineEdit().text())
+ text = self.widget.lineEdit().text()
elif isinstance(self.widget, QtWidgets.QComboBox):
text = self.widget.currentText()
else:
- text = asUnicode(value)
+ text = str(value)
self.displayLabel.setText(text)
def widgetValueChanged(self):
@@ -388,7 +388,7 @@ class SimpleParameter(Parameter):
'int': int,
'float': float,
'bool': bool,
- 'str': asUnicode,
+ 'str': str,
'color': self._interpColor,
'colormap': self._interpColormap,
}[self.opts['type']]
@@ -480,7 +480,7 @@ class GroupParameterItem(ParameterItem):
"""
if self.addWidget.currentIndex() == 0:
return
- typ = asUnicode(self.addWidget.currentText())
+ typ = self.addWidget.currentText()
self.param.addNew(typ)
self.addWidget.setCurrentIndex(0)
@@ -579,7 +579,7 @@ class ListParameterItem(WidgetParameterItem):
return w
def value(self):
- key = asUnicode(self.widget.currentText())
+ key = self.widget.currentText()
return self.forward.get(key, None)
@@ -601,7 +601,7 @@ class ListParameterItem(WidgetParameterItem):
self.forward, self.reverse = ListParameter.mapping(limits)
try:
self.widget.blockSignals(True)
- val = self.targetValue #asUnicode(self.widget.currentText())
+ val = self.targetValue
self.widget.clear()
for k in self.forward:
@@ -663,7 +663,7 @@ class ListParameter(Parameter):
reverse[1].append(k)
else:
for v in limits:
- n = asUnicode(v)
+ n = str(v)
forward[n] = v
reverse[0].append(v)
reverse[1].append(n)
@@ -877,7 +877,7 @@ class FileParameterItem(WidgetParameterItem):
def setValue(self, value):
self._value = value
- self.widget.setText(asUnicode(value))
+ self.widget.setText(str(value))
def value(self):
return self._value
@@ -919,7 +919,7 @@ class FileParameterItem(WidgetParameterItem):
lbl = self.displayLabel
if value is None:
value = self.param.value()
- value = asUnicode(value)
+ value = str(value)
font = lbl.font()
metrics = QtGui.QFontMetricsF(font)
value = metrics.elidedText(value, QtCore.Qt.TextElideMode.ElideLeft, lbl.width()-5)
@@ -985,7 +985,7 @@ class SliderParameterItem(WidgetParameterItem):
def updateDisplayLabel(self, value=None):
if value is None:
value = self.param.value()
- value = asUnicode(value)
+ value = str(value)
if self._suffix is None:
suffixTxt = ''
else:
diff --git a/pyqtgraph/python2_3.py b/pyqtgraph/python2_3.py
deleted file mode 100644
index 952b49b1..00000000
--- a/pyqtgraph/python2_3.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Helper functions that smooth out the differences between python 2 and 3.
-"""
-import sys
-
-def asUnicode(x):
- if sys.version_info[0] == 2:
- if isinstance(x, unicode):
- return x
- elif isinstance(x, str):
- return x.decode('UTF-8')
- else:
- return unicode(x)
- else:
- return str(x)
-
-
-if sys.version_info[0] == 3:
- basestring = str
- xrange = range
-else:
- import __builtin__
- basestring = __builtin__.basestring
- xrange = __builtin__.xrange
diff --git a/pyqtgraph/util/cprint.py b/pyqtgraph/util/cprint.py
index 533ae4b0..d5fb60c4 100644
--- a/pyqtgraph/util/cprint.py
+++ b/pyqtgraph/util/cprint.py
@@ -8,7 +8,6 @@ import sys
from .colorama.winterm import WinTerm, WinColor, WinStyle
from .colorama.win32 import windll
-from ..python2_3 import basestring
_WIN = sys.platform.startswith('win')
if windll is not None:
@@ -63,7 +62,7 @@ def cprint(stream, *args, **kwds):
cprint('stderr', 1, 'This is in red.', -1)
"""
- if isinstance(stream, basestring):
+ if isinstance(stream, str):
stream = kwds.get('stream', 'stdout')
err = stream == 'stderr'
stream = getattr(sys, stream)
@@ -74,7 +73,7 @@ def cprint(stream, *args, **kwds):
if _WIN:
# convert to win32 calls
for arg in args:
- if isinstance(arg, basestring):
+ if isinstance(arg, str):
stream.write(arg)
else:
kwds = WIN[arg]
@@ -82,14 +81,14 @@ def cprint(stream, *args, **kwds):
else:
# convert to ANSI
for arg in args:
- if isinstance(arg, basestring):
+ if isinstance(arg, str):
stream.write(arg)
else:
stream.write(ANSI[arg])
else:
# ignore colors
for arg in args:
- if isinstance(arg, basestring):
+ if isinstance(arg, str):
stream.write(arg)
def cout(*args):
diff --git a/pyqtgraph/widgets/ComboBox.py b/pyqtgraph/widgets/ComboBox.py
index a690404e..b0af09a0 100644
--- a/pyqtgraph/widgets/ComboBox.py
+++ b/pyqtgraph/widgets/ComboBox.py
@@ -2,7 +2,6 @@
import sys
from ..Qt import QtGui
from collections import OrderedDict
-from ..python2_3 import asUnicode, basestring
__all__ = ['ComboBox']
@@ -64,7 +63,7 @@ class ComboBox(QtGui.QComboBox):
"""
if self.count() == 0:
return None
- text = asUnicode(self.currentText())
+ text = self.currentText()
return self._items[text]
def ignoreIndexChange(func):
@@ -131,7 +130,7 @@ class ComboBox(QtGui.QComboBox):
# current index has changed; need to remember new 'chosen text'
if self._ignoreIndexChange:
return
- self._chosenText = asUnicode(self.currentText())
+ self._chosenText = self.currentText()
def setCurrentIndex(self, index):
QtGui.QComboBox.setCurrentIndex(self, index)
@@ -160,7 +159,7 @@ class ComboBox(QtGui.QComboBox):
def addItem(self, *args, **kwds):
# Need to handle two different function signatures for QComboBox.addItem
try:
- if isinstance(args[0], basestring):
+ if isinstance(args[0], str):
text = args[0]
if len(args) == 2:
value = args[1]
@@ -230,7 +229,7 @@ class ComboBox(QtGui.QComboBox):
except AttributeError:
pass
if data is None:
- return asUnicode(self.itemText(ind))
+ return self.itemText(ind)
else:
return data
diff --git a/pyqtgraph/widgets/DataFilterWidget.py b/pyqtgraph/widgets/DataFilterWidget.py
index a6f4d09f..0288cc3a 100644
--- a/pyqtgraph/widgets/DataFilterWidget.py
+++ b/pyqtgraph/widgets/DataFilterWidget.py
@@ -4,7 +4,6 @@ from .. import parametertree as ptree
import numpy as np
from collections import OrderedDict
from .. import functions as fn
-from ..python2_3 import basestring
__all__ = ['DataFilterWidget']
@@ -196,7 +195,7 @@ class EnumFilterItem(ptree.types.SimpleParameter):
if isinstance(valopts, bool):
enabled = valopts
vname = str(val)
- elif isinstance(valopts, basestring):
+ elif isinstance(valopts, str):
enabled = True
vname = valopts
elif isinstance(valopts, tuple):
diff --git a/pyqtgraph/widgets/DataTreeWidget.py b/pyqtgraph/widgets/DataTreeWidget.py
index 4c6f33a3..b9a5dd53 100644
--- a/pyqtgraph/widgets/DataTreeWidget.py
+++ b/pyqtgraph/widgets/DataTreeWidget.py
@@ -2,7 +2,6 @@
from ..Qt import QtGui
from collections import OrderedDict
from .TableWidget import TableWidget
-from ..python2_3 import asUnicode
import types, traceback
import numpy as np
@@ -55,7 +54,7 @@ class DataTreeWidget(QtGui.QTreeWidget):
if len(desc) > 100:
desc = desc[:97] + '...'
if widget is None:
- widget = QtGui.QPlainTextEdit(asUnicode(data))
+ widget = QtGui.QPlainTextEdit(str(data))
widget.setMaximumHeight(200)
widget.setReadOnly(True)
@@ -69,7 +68,7 @@ class DataTreeWidget(QtGui.QTreeWidget):
# recurse to children
for key, data in childs.items():
- self.buildTree(data, node, asUnicode(key), path=path+(key,))
+ self.buildTree(data, node, str(key), path=path+(key,))
def parse(self, data):
"""
@@ -117,11 +116,11 @@ class DataTreeWidget(QtGui.QTreeWidget):
#(i, {'file': child[0], 'line': child[1], 'function': child[2], 'code': child[3]})
#for i, child in enumerate(frames)])
#childs = OrderedDict([(i, ch) for i,ch in enumerate(frames)])
- widget = QtGui.QPlainTextEdit(asUnicode('\n'.join(frames)))
+ widget = QtGui.QPlainTextEdit('\n'.join(frames))
widget.setMaximumHeight(200)
widget.setReadOnly(True)
else:
- desc = asUnicode(data)
+ desc = str(data)
return typeStr, desc, childs, widget
diff --git a/pyqtgraph/widgets/GroupBox.py b/pyqtgraph/widgets/GroupBox.py
index 233e3ae3..ad7c25b9 100644
--- a/pyqtgraph/widgets/GroupBox.py
+++ b/pyqtgraph/widgets/GroupBox.py
@@ -1,6 +1,6 @@
+# -*- coding: utf-8 -*-
from ..Qt import QtGui, QtCore
from .PathButton import PathButton
-from ..python2_3 import basestring
__all__ = ['GroupBox']
@@ -41,7 +41,7 @@ class GroupBox(QtGui.QGroupBox):
self.collapseBtn.clicked.connect(self.toggleCollapsed)
- if len(args) > 0 and isinstance(args[0], basestring):
+ if len(args) > 0 and isinstance(args[0], str):
self.setTitle(args[0])
def toggleCollapsed(self):
diff --git a/pyqtgraph/widgets/SpinBox.py b/pyqtgraph/widgets/SpinBox.py
index bd7b8e49..75f24cb7 100644
--- a/pyqtgraph/widgets/SpinBox.py
+++ b/pyqtgraph/widgets/SpinBox.py
@@ -4,7 +4,6 @@ import decimal
import re
from ..Qt import QtGui, QtCore
-from ..python2_3 import asUnicode, basestring
from ..SignalProxy import SignalProxy
from .. import functions as fn
@@ -90,7 +89,7 @@ class SpinBox(QtGui.QAbstractSpinBox):
'decimals': 6,
- 'format': asUnicode("{scaledValue:.{decimals}g}{suffixGap}{siPrefix}{suffix}"),
+ 'format': "{scaledValue:.{decimals}g}{suffixGap}{siPrefix}{suffix}",
'regex': fn.FLOAT_REGEX,
'evalFunc': decimal.Decimal,
@@ -99,7 +98,7 @@ class SpinBox(QtGui.QAbstractSpinBox):
self.decOpts = ['step', 'minStep']
- self.val = decimal.Decimal(asUnicode(value)) ## Value is precise decimal. Ordinary math not allowed.
+ self.val = decimal.Decimal(str(value)) ## Value is precise decimal. Ordinary math not allowed.
self.updateText()
self.skipValidate = False
self.setCorrectionMode(self.CorrectionMode.CorrectToPreviousValue)
@@ -181,12 +180,12 @@ class SpinBox(QtGui.QAbstractSpinBox):
elif k == 'max':
self.setMaximum(v, update=False)
elif k in ['step', 'minStep']:
- self.opts[k] = decimal.Decimal(asUnicode(v))
+ self.opts[k] = decimal.Decimal(str(v))
elif k == 'value':
pass ## don't set value until bounds have been set
elif k == 'format':
- self.opts[k] = asUnicode(v)
- elif k == 'regex' and isinstance(v, basestring):
+ self.opts[k] = str(v)
+ elif k == 'regex' and isinstance(v, str):
self.opts[k] = re.compile(v)
elif k in self.opts:
self.opts[k] = v
@@ -220,7 +219,7 @@ class SpinBox(QtGui.QAbstractSpinBox):
self.opts['minStep'] = ms
if 'format' not in opts:
- self.opts['format'] = asUnicode("{value:d}{suffixGap}{suffix}")
+ self.opts['format'] = "{value:d}{suffixGap}{suffix}"
if self.opts['dec']:
if self.opts.get('minStep') is None:
@@ -234,7 +233,7 @@ class SpinBox(QtGui.QAbstractSpinBox):
def setMaximum(self, m, update=True):
"""Set the maximum allowed value (or None for no limit)"""
if m is not None:
- m = decimal.Decimal(asUnicode(m))
+ m = decimal.Decimal(str(m))
self.opts['bounds'][1] = m
if update:
self.setValue()
@@ -242,7 +241,7 @@ class SpinBox(QtGui.QAbstractSpinBox):
def setMinimum(self, m, update=True):
"""Set the minimum allowed value (or None for no limit)"""
if m is not None:
- m = decimal.Decimal(asUnicode(m))
+ m = decimal.Decimal(str(m))
self.opts['bounds'][0] = m
if update:
self.setValue()
@@ -298,7 +297,7 @@ class SpinBox(QtGui.QAbstractSpinBox):
Select the numerical portion of the text to allow quick editing by the user.
"""
le = self.lineEdit()
- text = asUnicode(le.text())
+ text = le.text()
m = self.opts['regex'].match(text)
if m is None:
return
@@ -358,7 +357,7 @@ class SpinBox(QtGui.QAbstractSpinBox):
value = int(value)
if not isinstance(value, decimal.Decimal):
- value = decimal.Decimal(asUnicode(value))
+ value = decimal.Decimal(str(value))
prev, self.val = self.val, value
changed = not fn.eq(value, prev) # use fn.eq to handle nan
@@ -558,9 +557,7 @@ class SpinBox(QtGui.QAbstractSpinBox):
def editingFinishedEvent(self):
"""Edit has finished; set value."""
- #print "Edit finished."
- if asUnicode(self.lineEdit().text()) == self.lastText:
- #print "no text change."
+ if self.lineEdit().text() == self.lastText:
return
try:
val = self.interpret()
@@ -568,10 +565,8 @@ class SpinBox(QtGui.QAbstractSpinBox):
return
if val is False:
- #print "value invalid:", str(self.lineEdit().text())
return
if val == self.val:
- #print "no value change:", val, self.val
return
self.setValue(val, delaySignal=False) ## allow text update so that values are reformatted pretty-like
diff --git a/pyqtgraph/widgets/TableWidget.py b/pyqtgraph/widgets/TableWidget.py
index 06abd1e9..e8bfee9a 100644
--- a/pyqtgraph/widgets/TableWidget.py
+++ b/pyqtgraph/widgets/TableWidget.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
import numpy as np
from ..Qt import QtGui, QtCore
-from ..python2_3 import asUnicode, basestring
from .. import metaarray
translate = QtCore.QCoreApplication.translate
@@ -170,7 +169,7 @@ class TableWidget(QtGui.QTableWidget):
Added in version 0.9.9.
"""
- if format is not None and not isinstance(format, basestring) and not callable(format):
+ if format is not None and not isinstance(format, str) and not callable(format):
raise ValueError("Format argument must string, callable, or None. (got %s)" % format)
self._formats[column] = format
@@ -203,19 +202,19 @@ class TableWidget(QtGui.QTableWidget):
if isinstance(data, list) or isinstance(data, tuple):
return lambda d: d.__iter__(), None
elif isinstance(data, dict):
- return lambda d: iter(d.values()), list(map(asUnicode, data.keys()))
+ return lambda d: iter(d.values()), list(map(str, data.keys()))
elif (hasattr(data, 'implements') and data.implements('MetaArray')):
if data.axisHasColumns(0):
- header = [asUnicode(data.columnName(0, i)) for i in range(data.shape[0])]
+ header = [str(data.columnName(0, i)) for i in range(data.shape[0])]
elif data.axisHasValues(0):
- header = list(map(asUnicode, data.xvals(0)))
+ header = list(map(str, data.xvals(0)))
else:
header = None
return self.iterFirstAxis, header
elif isinstance(data, np.ndarray):
return self.iterFirstAxis, None
elif isinstance(data, np.void):
- return self.iterate, list(map(asUnicode, data.dtype.names))
+ return self.iterate, list(map(str, data.dtype.names))
elif data is None:
return (None,None)
elif np.isscalar(data):
@@ -311,22 +310,22 @@ class TableWidget(QtGui.QTableWidget):
if self.horizontalHeadersSet:
row = []
if self.verticalHeadersSet:
- row.append(asUnicode(''))
+ row.append('')
for c in columns:
- row.append(asUnicode(self.horizontalHeaderItem(c).text()))
+ row.append(self.horizontalHeaderItem(c).text())
data.append(row)
for r in rows:
row = []
if self.verticalHeadersSet:
- row.append(asUnicode(self.verticalHeaderItem(r).text()))
+ row.append(self.verticalHeaderItem(r).text())
for c in columns:
item = self.item(r, c)
if item is not None:
- row.append(asUnicode(item.value))
+ row.append(str(item.value))
else:
- row.append(asUnicode(''))
+ row.append('')
data.append(row)
s = ''
@@ -427,7 +426,7 @@ class TableWidgetItem(QtGui.QTableWidgetItem):
Added in version 0.9.9.
"""
- if fmt is not None and not isinstance(fmt, basestring) and not callable(fmt):
+ if fmt is not None and not isinstance(fmt, str) and not callable(fmt):
raise ValueError("Format argument must string, callable, or None. (got %s)" % fmt)
self._format = fmt
self._updateText()
@@ -473,7 +472,7 @@ class TableWidgetItem(QtGui.QTableWidgetItem):
else:
return self._format % self.value
else:
- return asUnicode(self.value)
+ return str(self.value)
def __lt__(self, other):
if self.sortMode == 'index' and hasattr(other, 'index'):
diff --git a/tests/dockarea/test_dock.py b/tests/dockarea/test_dock.py
index e5063f8d..632277af 100644
--- a/tests/dockarea/test_dock.py
+++ b/tests/dockarea/test_dock.py
@@ -1,10 +1,11 @@
+# -*- coding: utf-8 -*-
import pyqtgraph as pg
pg.mkQApp()
import pyqtgraph.dockarea as da
def test_dock():
- name = pg.asUnicode("évènts_zàhéér")
+ name = "évènts_zàhéér"
dock = da.Dock(name=name)
# make sure unicode names work correctly
assert dock.name() == name
diff --git a/tests/parametertree/test_parametertypes.py b/tests/parametertree/test_parametertypes.py
index 855fdad4..a5c2ea6c 100644
--- a/tests/parametertree/test_parametertypes.py
+++ b/tests/parametertree/test_parametertypes.py
@@ -1,8 +1,8 @@
+# -*- coding: utf-8 -*-
import sys
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph.parametertree as pt
import pyqtgraph as pg
-from pyqtgraph.python2_3 import asUnicode
from pyqtgraph.functions import eq
import numpy as np
@@ -44,7 +44,7 @@ def test_types():
all_objs = {
'int0': 0, 'int':7, 'float': -0.35, 'bigfloat': 1e129, 'npfloat': np.float64(5),
'npint': np.int64(5),'npinf': np.inf, 'npnan': np.nan, 'bool': True,
- 'complex': 5+3j, 'str': '#xxx', 'unicode': asUnicode('µ'),
+ 'complex': 5+3j, 'str': '#xxx', 'unicode': 'µ',
'list': [1,2,3], 'dict': {'1': 2}, 'color': pg.mkColor('k'),
'brush': pg.mkBrush('k'), 'pen': pg.mkPen('k'), 'none': None
}
@@ -63,7 +63,7 @@ def test_types():
# str (should be able to make a string out of any type)
types = all_objs.keys()
strtyp = str if sys.version[0] >= '3' else unicode
- check_param_types(param.child('str'), strtyp, asUnicode, '', all_objs, types)
+ check_param_types(param.child('str'), strtyp, str, '', all_objs, types)
# bool (should be able to make a boolean out of any type?)
types = all_objs.keys()
diff --git a/tests/widgets/test_spinbox.py b/tests/widgets/test_spinbox.py
index 19a7bbfa..3c85bc32 100644
--- a/tests/widgets/test_spinbox.py
+++ b/tests/widgets/test_spinbox.py
@@ -30,7 +30,7 @@ def test_SpinBox_formatting(value, expected_text, opts):
sb.setValue(value)
assert sb.value() == value
- assert pg.asUnicode(sb.text()) == expected_text
+ assert sb.text() == expected_text
@pytest.mark.parametrize("suffix", ["", "V"])
diff --git a/tests/widgets/test_tablewidget.py b/tests/widgets/test_tablewidget.py
index 05774de3..2d2580cc 100644
--- a/tests/widgets/test_tablewidget.py
+++ b/tests/widgets/test_tablewidget.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
import pyqtgraph as pg
import numpy as np
from collections import OrderedDict
@@ -112,7 +113,7 @@ def test_TableWidget():
if isinstance(item.value, float):
return "%d %f" % (item.index, item.value)
else:
- return pg.asUnicode(item.value)
+ return str(item.value)
w.setFormat(fmt)
assert isinstance(item.value, float)
assert isinstance(item.index, int)