سؤال

كيف يمكنني إضافة chaco إلى تطبيق pyqt4 الحالي؟

لم تسفر ساعات البحث عن القليل (ابحث عن نفسك). حتى الآن اعتقدت أنني بحاجة إلى الأسطر التالية:

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

لم أتمكن من العثور على رمز pyqt4-chaco في أي مكان على internets

سأكون ممتنًا جدًا لأي شخص يملأ الفراغات ليظهر لي أبسط مؤامرة خط ممكن (مع نقطتين)

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

ما فئة chaco/archought التي ترث من QWidget؟

هل كانت مفيدة؟

المحلول

هنا هو ما تحتاجه:

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 من QWidget

نصائح أخرى

انا فقط رايت هذا اليوم. من الممكن تمامًا ومباشرة إلى حد ما تضمين Chaco داخل QT وكذلك WX. في الواقع ، فإن جميع الأمثلة ، عند تشغيلها مع بيئة ETS_TOOLKIT الخاصة بك ، تعمل على "QT4" ، تفعل ذلك بالضبط. (تشاكو يستوجب هناك مجموعة أدوات واجهة المستخدم الرسومية الأساسية.)

لقد كتبت مثالًا صغيرًا مستقلًا يملأ الفراغات في قالب الكود الخاص بك ، وتوضح كيفية تضمين مؤامرة chaco داخل نافذة 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()

لا أعرف عن Chaco ، لكنني أستخدم VTK ، إليك رمز لرسم بعض الخطوط ، مع إحداثيات (x ، y ، z) منها.

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

ويستخدم QVTKRenderWindowInteractor للتفاعل مع PYQT4.

لا أعرف تشاكو ، لكن نظرة سريعة تخبرني أن هذا غير ممكن.

كل من Chaco و Pyqt هما مجموعات أدوات رسومية مصممة للتفاعل مع المستخدم. تشاكو موجه نحو المؤامرة و pyqt أكثر توجها نحو التطبيق. كل واحد له طريقته الخاصة لإدارة ماهية النافذة ، وكيفية اكتشاف نقرات المستخدم ، وكيفية التعامل مع أحداث الطلاء ، ... حتى لا تخلط معًا.

إذا كنت بحاجة إلى رسم برامج ، فيمكنك محاولة استخدام Matplotlib لإنشاء صور ثابتة من الرسم البياني وإظهار الصورة في PYQT. أو جرب رسمًا بيانيًا قائمًا على PYQT أو مجموعة أدوات التخطيط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top