Converted all png files to compiled .py file; this allows easier packaging with py2exe
Added example scripts used for bundling with py2exe
@ -7,10 +7,14 @@ class ButtonItem(GraphicsObject):
|
|||||||
|
|
||||||
clicked = QtCore.Signal(object)
|
clicked = QtCore.Signal(object)
|
||||||
|
|
||||||
def __init__(self, imageFile, width=None, parentItem=None):
|
def __init__(self, imageFile=None, width=None, parentItem=None, pixmap=None):
|
||||||
self.enabled = True
|
self.enabled = True
|
||||||
GraphicsObject.__init__(self)
|
GraphicsObject.__init__(self)
|
||||||
self.setImageFile(imageFile)
|
if imageFile is not None:
|
||||||
|
self.setImageFile(imageFile)
|
||||||
|
elif pixmap is not None:
|
||||||
|
self.setPixmap(pixmap)
|
||||||
|
|
||||||
if width is not None:
|
if width is not None:
|
||||||
s = float(width) / self.pixmap.width()
|
s = float(width) / self.pixmap.width()
|
||||||
self.scale(s, s)
|
self.scale(s, s)
|
||||||
@ -19,7 +23,10 @@ class ButtonItem(GraphicsObject):
|
|||||||
self.setOpacity(0.7)
|
self.setOpacity(0.7)
|
||||||
|
|
||||||
def setImageFile(self, imageFile):
|
def setImageFile(self, imageFile):
|
||||||
self.pixmap = QtGui.QPixmap(imageFile)
|
self.setPixmap(QtGui.QPixmap(imageFile))
|
||||||
|
|
||||||
|
def setPixmap(self, pixmap):
|
||||||
|
self.pixmap = pixmap
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
def mouseClickEvent(self, ev):
|
def mouseClickEvent(self, ev):
|
||||||
|
@ -17,6 +17,7 @@ This class is very heavily featured:
|
|||||||
display, power spectrum, svg/png export, plot linking, and more.
|
display, power spectrum, svg/png export, plot linking, and more.
|
||||||
"""
|
"""
|
||||||
from pyqtgraph.Qt import QtGui, QtCore, QtSvg, USE_PYSIDE
|
from pyqtgraph.Qt import QtGui, QtCore, QtSvg, USE_PYSIDE
|
||||||
|
import pyqtgraph.pixmaps
|
||||||
|
|
||||||
if USE_PYSIDE:
|
if USE_PYSIDE:
|
||||||
from .plotConfigTemplate_pyside import *
|
from .plotConfigTemplate_pyside import *
|
||||||
@ -124,9 +125,9 @@ class PlotItem(GraphicsWidget):
|
|||||||
|
|
||||||
## Set up control buttons
|
## Set up control buttons
|
||||||
path = os.path.dirname(__file__)
|
path = os.path.dirname(__file__)
|
||||||
self.autoImageFile = os.path.join(path, 'auto.png')
|
#self.autoImageFile = os.path.join(path, 'auto.png')
|
||||||
self.lockImageFile = os.path.join(path, 'lock.png')
|
#self.lockImageFile = os.path.join(path, 'lock.png')
|
||||||
self.autoBtn = ButtonItem(self.autoImageFile, 14, self)
|
self.autoBtn = ButtonItem(pyqtgraph.pixmaps.getPixmap('auto'), 14, self)
|
||||||
self.autoBtn.mode = 'auto'
|
self.autoBtn.mode = 'auto'
|
||||||
self.autoBtn.clicked.connect(self.autoBtnClicked)
|
self.autoBtn.clicked.connect(self.autoBtnClicked)
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ from .ParameterItem import ParameterItem
|
|||||||
from pyqtgraph.widgets.SpinBox import SpinBox
|
from pyqtgraph.widgets.SpinBox import SpinBox
|
||||||
from pyqtgraph.widgets.ColorButton import ColorButton
|
from pyqtgraph.widgets.ColorButton import ColorButton
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
|
import pyqtgraph.pixmaps as pixmaps
|
||||||
import os
|
import os
|
||||||
from pyqtgraph.pgcollections import OrderedDict
|
from pyqtgraph.pgcollections import OrderedDict
|
||||||
|
|
||||||
@ -39,7 +40,7 @@ class WidgetParameterItem(ParameterItem):
|
|||||||
self.defaultBtn.setFixedWidth(20)
|
self.defaultBtn.setFixedWidth(20)
|
||||||
self.defaultBtn.setFixedHeight(20)
|
self.defaultBtn.setFixedHeight(20)
|
||||||
modDir = os.path.dirname(__file__)
|
modDir = os.path.dirname(__file__)
|
||||||
self.defaultBtn.setIcon(QtGui.QIcon(os.path.join(modDir, 'default.png')))
|
self.defaultBtn.setIcon(QtGui.QIcon(pixmaps.getPixmap('default')))
|
||||||
self.defaultBtn.clicked.connect(self.defaultClicked)
|
self.defaultBtn.clicked.connect(self.defaultClicked)
|
||||||
|
|
||||||
self.displayLabel = QtGui.QLabel()
|
self.displayLabel = QtGui.QLabel()
|
||||||
|
23
pixmaps/__init__.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
"""
|
||||||
|
Allows easy loading of pixmaps used in UI elements.
|
||||||
|
Provides support for frozen environments as well.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os, sys, pickle
|
||||||
|
from ..functions import makeQImage
|
||||||
|
from ..Qt import QtGui
|
||||||
|
import pixmapData
|
||||||
|
|
||||||
|
|
||||||
|
def getPixmap(name):
|
||||||
|
"""
|
||||||
|
Return a QPixmap corresponding to the image file with the given name.
|
||||||
|
(eg. getPixmap('auto') loads pyqtgraph/pixmaps/auto.png)
|
||||||
|
"""
|
||||||
|
key = name+'.png'
|
||||||
|
data = pixmapData.pixmapData[key]
|
||||||
|
if isinstance(data, basestring):
|
||||||
|
pixmapData.pixmapData[key] = pickle.loads(data)
|
||||||
|
arr = pixmapData.pixmapData[key]
|
||||||
|
return QtGui.QPixmap(makeQImage(arr, alpha=True))
|
||||||
|
|
Before Width: | Height: | Size: 1022 B After Width: | Height: | Size: 1022 B |
18
pixmaps/compile.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import numpy as np
|
||||||
|
from PyQt4 import QtGui
|
||||||
|
import os, pickle
|
||||||
|
|
||||||
|
path = os.path.split(__file__)[0]
|
||||||
|
pixmaps = {}
|
||||||
|
for f in os.listdir(path):
|
||||||
|
if not f.endswith('.png'):
|
||||||
|
continue
|
||||||
|
print f
|
||||||
|
img = QtGui.QImage(os.path.join(path, f))
|
||||||
|
ptr = img.bits()
|
||||||
|
ptr.setsize(img.byteCount())
|
||||||
|
arr = np.asarray(ptr).reshape(img.height(), img.width(), 4).transpose(1,0,2)
|
||||||
|
pixmaps[f] = pickle.dumps(arr)
|
||||||
|
fh = open(os.path.join(path, 'pixmapData.py'), 'w')
|
||||||
|
fh.write("import numpy as np; pixmapData=%s" % repr(pixmaps))
|
||||||
|
|
Before Width: | Height: | Size: 934 B After Width: | Height: | Size: 934 B |
Before Width: | Height: | Size: 810 B After Width: | Height: | Size: 810 B |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 913 B After Width: | Height: | Size: 913 B |
1
pixmaps/pixmapData.py
Normal file
10
tools/py2exe.bat
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
rem
|
||||||
|
rem This is a simple windows batch file containing the commands needed to package
|
||||||
|
rem a program with pyqtgraph and py2exe. See the packaging tutorial at
|
||||||
|
rem http://luke.campagnola.me/code/pyqtgraph for more information.
|
||||||
|
rem
|
||||||
|
|
||||||
|
rmdir /S /Q dist
|
||||||
|
rmdir /S /Q build
|
||||||
|
python .\py2exeSetupWindows.py py2exe --includes sip
|
||||||
|
pause
|
26
tools/py2exeSetupWindows.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
"""
|
||||||
|
Example distutils setup script for packaging a program with
|
||||||
|
pyqtgraph and py2exe. See the packaging tutorial at
|
||||||
|
http://luke.campagnola.me/code/pyqtgraph for more information.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from distutils.core import setup
|
||||||
|
from glob import glob
|
||||||
|
import py2exe
|
||||||
|
import sys
|
||||||
|
|
||||||
|
## This path must contain msvcm90.dll, msvcp90.dll, msvcr90.dll, and Microsoft.VC90.CRT.manifest
|
||||||
|
## (see http://www.py2exe.org/index.cgi/Tutorial)
|
||||||
|
dllpath = r'C:\Windows\WinSxS\x86_Microsoft.VC90.CRT...'
|
||||||
|
|
||||||
|
sys.path.append(dllpath)
|
||||||
|
data_files = [
|
||||||
|
## Instruct setup to copy the needed DLL files into the build directory
|
||||||
|
("Microsoft.VC90.CRT", glob(dllpath + r'\*.*')),
|
||||||
|
]
|
||||||
|
|
||||||
|
setup(
|
||||||
|
data_files=data_files,
|
||||||
|
windows=['main.py'] ,
|
||||||
|
options={"py2exe": {"excludes":["Tkconstants", "Tkinter", "tcl"]}}
|
||||||
|
)
|