Frage

Wie gehe ich über das Hinzufügen von Chaco zu einer bestehenden PyQt4 Anwendung?

Stunden Suche ergab wenig ( suchen für sich selbst ). Bisher habe ich gedacht, ich brauche die folgenden Zeilen:

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

Ich kann nicht PyQt4-Chaco-Code irgendwo auf dem internets finden

Ich wäre sehr dankbar, dass jemand Füllung in den freien Räumen mir zu zeigen, das einfachste Linie Grundstück möglich (mit 2 Punkten)

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')

was Chaco / Enthought Klasse erbt von QWidget?

War es hilfreich?

Lösung

Hier ist, was Sie brauchen:

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 erbt von QWidget

Andere Tipps

ich das heute gerade gesehen. Es ist durchaus möglich und relativ einfach einzubetten Chaco innerhalb Qt sowie WX. In der Tat, alle Beispiele, wenn Sie mit Ihrem ETS_TOOLKIT Umgebung var auf „qt4“ laufen, tun genau dies. (Chaco erfordert es ein zugrunde liegender GUI-Toolkit sein.)

Ich habe ein kleines geschrieben, eigenständiges Beispiel, dass füllt die Lücken im Code-Vorlage, und zeigt, wie ein chaco Plot in einem Qt Fenster einzubetten.

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()

Ich weiß nicht, über Chaco, aber ich bin VTK verwenden, hier Code ist es, einige Linien zu zeichnen, mit einem (x, y, z) Koordinaten von ihnen.

    """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()

Es verwendet QVTKRenderWindowInteractor zu interagieren mit dem PyQT4.

Ich weiß nicht, Chaco, aber ein kurzer Blick sagt mir, dass dies nicht möglich ist.

Sowohl Chaco und PyQt sind grafische Toolkits entwickelt, mit dem Benutzer zu interagieren. Chaco ist Handlung orientiert und PyQt mehr anwendungsorientiert. Jeder hat seine eigene Art und Weise zu verwalten, was ein Fenster ist, wie Benutzer klickt zu erkennen, wie Farbe Ereignisse zu behandeln, ... damit sie nicht zusammen mischen.

Wenn Sie Software brauchen Plotten, können Sie versuchen matplotlib zu verwenden statische Bilder von Graphen zu erzeugen und das Bild in PyQt zeigen. Oder versuchen, eine PyQt basierte Grafik oder Plotten Toolkit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top