Domanda

Come posso fare per l'aggiunta di Chaco a un'applicazione PyQt4 esistente?

ore di ricerche hanno prodotto poco ( ricerca di te ). Finora ho capito ho bisogno le seguenti linee:

import os
os.environ['ETS_TOOLKIT']='qt4'

non ho potuto trovare il codice PyQt4-Chaco ovunque sui internet

sarei molto grato a tutti coloro che riempire gli spazi vuoti per mostrarmi la trama linea più semplice possibile (con 2 punti)

from PyQt4 import QtCore, QtGui
import sys
import os
os.environ['ETS_TOOLKIT']='qt4'

from enthought <blanks>
:
:

app = QtGui.QApplication(sys.argv)
main_window = QtGui.QMainWindow()
main_window.setCentralWidget(<blanks>)
main_window.show()
app.exec_()
print('bye')

quale classe Chaco / Enthought eredita da QWidget?

È stato utile?

Soluzione

Ecco quello che vi serve:

import os, sys
os.environ['ETS_TOOLKIT'] = 'qt4'

from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
from numpy import linspace, pi, sin
from enthought.enable.api import Component, Container, Window
from enthought.chaco.api import create_line_plot, \
                                add_default_axes, \
                                add_default_grids, \
                                OverlayPlotContainer


x = linspace(-pi,pi,100)
y = sin(x)
plot = create_line_plot((x,y))
add_default_grids(plot)
add_default_axes(plot)
container = OverlayPlotContainer(padding = 50)
container.add(plot)
plot_window = Window(None, -1, component=container)
plot_window.control.setWindowTitle('hello')
plot_window.control.resize(400,400)
plot_window.control.show()

app.exec_()

plot_window.control eredita da QWidget

Altri suggerimenti

Ho appena visto questo oggi. È assolutamente possibile e relativamente semplice per incorporare Chaco all'interno Qt nonché WX. In realtà, tutti gli esempi, se eseguito con l'ambiente ETS_TOOLKIT var impostato su "Qt4", stanno facendo esattamente questo. (Chaco richiede che ci sia una GUI toolkit sottostante.)

ho scritto un piccolo, ad esempio standalone che riempie gli spazi vuoti nel vostro modello di codice, e dimostra come incorporare un Plot Chaco all'interno di una finestra Qt.

qt_example.py :

"""
Example of how to directly embed Chaco into Qt widgets.

The actual plot being created is drawn from the basic/line_plot1.py code.
"""

import sys
from numpy import linspace
from scipy.special import jn
from PyQt4 import QtGui, QtCore

from enthought.etsconfig.etsconfig import ETSConfig
ETSConfig.toolkit = "qt4"
from enthought.enable.api import Window

from enthought.chaco.api import ArrayPlotData, Plot
from enthought.chaco.tools.api import PanTool, ZoomTool


class PlotFrame(QtGui.QWidget):
    """ This widget simply hosts an opaque enthought.enable.qt4_backend.Window
    object, which provides the bridge between Enable/Chaco and the underlying
    UI toolkit (qt4).  This code is basically a duplicate of what's in
    enthought.enable.example_support.DemoFrame, but is reproduced here to
    make this example more stand-alone.
    """
    def __init__(self, parent, **kw):
        QtGui.QWidget.__init__(self)

def create_chaco_plot(parent):
    x = linspace(-2.0, 10.0, 100)
    pd = ArrayPlotData(index = x)
    for i in range(5):
        pd.set_data("y" + str(i), jn(i,x))

    # Create some line plots of some of the data
    plot = Plot(pd, title="Line Plot", padding=50, border_visible=True)
    plot.legend.visible = True
    plot.plot(("index", "y0", "y1", "y2"), name="j_n, n<3", color="red")
    plot.plot(("index", "y3"), name="j_3", color="blue")

    # Attach some tools to the plot
    plot.tools.append(PanTool(plot))
    zoom = ZoomTool(component=plot, tool_mode="box", always_on=False)
    plot.overlays.append(zoom)

    # This Window object bridges the Enable and Qt4 worlds, and handles events
    # and drawing.  We can create whatever hierarchy of nested containers we
    # want, as long as the top-level item gets set as the .component attribute
    # of a Window.
    return Window(parent, -1, component = plot)

def main():
    app = QtGui.QApplication(sys.argv)
    main_window = QtGui.QMainWindow(size=QtCore.QSize(500,500))

    enable_window = create_chaco_plot(main_window)

    # The .control attribute references a QWidget that gives Chaco events
    # and that Chaco paints into.
    main_window.setCentralWidget(enable_window.control)

    main_window.show()
    app.exec_()

if __name__ == "__main__":
    main()

Non so su Chaco, ma sto usando VTK, ecco il codice per disegnare alcune linee, avendo una (x, y, z) coordinate di loro.

    """Define an actor and its properties, to be drawn on the scene using 'lines' representation."""
    ren = vtk.vtkRenderer()
    apd=vtk.vtkAppendPolyData()

    for i in xrange(len(coordinates)):
        line=vtk.vtkLineSource()

        line.SetPoint1(coordinates[i][0]) # 1st atom coordinates for a given bond
        line.SetPoint2(coordinates[i][1]) # 2nd atom coordinates for a given bond
        line.SetResolution(21)
        apd.AddInput(line.GetOutput())

    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInput(apd.GetOutput())
    lines_actor = vtk.vtkActor()
    lines_actor.SetMapper(mapper)
    lines_actor.GetProperty().SetColor(colorR, colorG, colorB)
    lines_actor.GetProperty().SetOpacity(opacity)

        # Add newly created actor to the renderer.
        self.ren.AddViewProp(actor) # Prop is the superclass of all actors, composite props etc.
        # Update renderer.
        self.ren.GetRenderWindow().Render()

Si utilizza QVTKRenderWindowInteractor per interagire con il PyQt4.

Non so Chaco, ma una rapida occhiata mi dice che questo non è possibile.

Sia Chaco e PyQt sono toolkit grafici progettate per interagire con l'utente. Chaco è plot oriented e PyQt applicazione più orientato. Ognuno ha il suo modo di gestire ciò che una finestra è, come rilevare utente fa clic, come gestire gli eventi di vernice, ... in modo che essi non si mescolano insieme.

Se avete bisogno di tracciare il software, si può provare a utilizzare matplotlib per generare immagini statiche di grafico e mostrare l'immagine in PyQt. O provare un PyQt grafico basato o toolkit stampa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top