- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试与 Chaco 和 pyqt 一起为实验室硬件绘制实时数据采集任务。我之前使用的是 matplotlib,但事实证明它太慢了(我什至尝试过动画)。当我在 pyqt 窗口中嵌入一个 matplotlib 图时,以下代码工作正常,但是对于 chaco,当我从线程内部发出更新信号时没有任何反应。如果您不使用线程进行模拟采集,此代码将起作用。我试过使用 qthreads 也无济于事(包括这样的东西:Threading and Signals problem in PyQt)。有没有人使用过 pyqt + chaco + threading 可以帮助我找到我哪里出错了,或者发生了什么事?
import sys
import threading, time
import numpy as np
from enthought.etsconfig.etsconfig import ETSConfig
ETSConfig.toolkit = "qt4"
from enthought.enable.api import Window
from enthought.chaco.api import ArrayPlotData, Plot
from PyQt4 import QtGui, QtCore
class Signals(QtCore.QObject):
done_collecting = QtCore.pyqtSignal(np.ndarray, np.ndarray)
class PlotWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
x = np.linspace(0,2*np.pi,200)
y = np.sin(x)
plotdata = ArrayPlotData(x=x, y=y)
plot = Plot(plotdata, padding=50, border_visible=True)
plot.plot(('x', 'y'))
window = Window(self,-1, component=plot)
self.setCentralWidget(window.control)
self.resize(500,500)
self.pd = plotdata
def update_display(self, x, y):
print 'updating'
self.pd.set_data('x', x)
self.pd.set_data('y', y)
def run_collection(signal):
# this is where I would start and stop my hardware,
# but I will just call the read function myself here
for i in range(1,10):
every_n_collected(i, signal)
time.sleep(0.5)
def every_n_collected(frequency, signal):
# dummy data to take place of device read
x = np.linspace(0,2*np.pi,200)
y = np.sin(x*frequency)
print 'emitting'
signal.emit(x, y)
QtGui.QApplication.processEvents()
def main():
plt = PlotWindow()
plt.show()
QtGui.QApplication.processEvents()
signals = Signals()
signals.done_collecting.connect(plt.update_display)
t = threading.Thread(target=run_collection, args=(signals.done_collecting,))
t.start()
t.join()
QtGui.QApplication.processEvents()
# it works without threads though...
# run_collection(signals.done_collecting)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main()
最佳答案
您在主线程(即 UI 线程)上调用 join 会阻塞该线程并阻止 UI 处理事件。如果您在主函数中启动应用程序/GUI 事件循环并等待应用程序关闭而不调用 t.join(),它应该可以正常工作。
这是使用常规 Traits/TraitsUI/Chaco 应用程序的方法。
import time
import threading
import numpy as np
from traits.etsconfig.etsconfig import ETSConfig
ETSConfig.toolkit = "qt4"
from enable.api import ComponentEditor
from chaco.api import ArrayPlotData, Plot
from traits.api import Event, HasTraits, Instance
from traitsui.api import View, Item
class PlotWindow(HasTraits):
dataset = Instance(ArrayPlotData)
plot = Instance(Plot)
def _dataset_default(self):
x = np.linspace(0,2*np.pi,200)
y = np.sin(x)
plotdata = ArrayPlotData(x=x, y=y)
return plotdata
def _plot_default(self):
plot = Plot(self.dataset, padding=50, border_visible=True)
plot.plot(('x', 'y'))
return plot
def update_display(self, x, y):
print 'updating', threading.current_thread()
self.dataset.set_data('x', x)
self.dataset.set_data('y', y)
traits_view = View(
Item('plot', editor=ComponentEditor(size=(400, 400)), show_label=False)
)
def run_collection(datamodel):
# this is where I would start and stop my hardware,
# but I will just call the read function myself here
for i in range(1,10):
x = np.linspace(0,2*np.pi,200)
y = np.sin(x*i)
datamodel.update_display(x, y)
time.sleep(0.5)
def main():
plot = PlotWindow()
t = threading.Thread(target=run_collection, args=(plot,))
t.start()
# Starts the UI and the GUI mainloop
plot.configure_traits()
# don't call t.join() as it blocks the current thread...
if __name__ == "__main__":
main()
关于python - Chaco 和 PyQt 无法发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18369460/
我正在开发一个程序,其中有两个相邻的地 block 。第一个图有一个 ZoomTool、一个 PanTool 和一个 RangeSelection 工具。第二个图应根据左侧图中所做的更改(缩放等)进行
我试图在 Chaco 中隐藏/显示线图。我引用了绘图名称和渲染器 plot = Plot(....) renderer = plot.plot((x, y), ...)[0] renderer.vis
Chaco 中的小刻度总是被省略: 这并不总是很方便。 Chaco 中是否有可能像 matplotlib 中那样有小刻度: 没有找到任何相关内容..谢谢。 最佳答案 编辑:此功能现已添加到 Chaco
是否可以使chaco图自动显示完整输出而不隐藏刻度线和标签部分?例如。这是标准示例的输出: from chaco.api import ArrayPlotData, Plot from enable.
如何显示在运行线程中创建的 Chaco 图?我认为一个例子会让我的想法更清晰一些: 看看我使用 Chaco 创建绘图的示例代码。 from traits.api import HasTraits, I
我正在探索 Traits/TraitsUI/Chaco来自 Enthought 的包裹因为我想使用强大的动态绘图工具。我有来自外部来源的数据,我希望使用这些数据来更新一组 Chaco 图。我研究了 s
注意:我将亲自回答这个问题,以帮助将来遇到此问题的其他人。如果您愿意,请随时提交您自己的答案,但要知道已经有人回答了! 如何在 Chaco 中将具有一个颜色图的蒙版图像叠加到另一个具有不同颜色图的图像
我想更改 chaco Legend 上的线条标签,因为我的标签需要是升序 float : 1,2,3,4 但它是字符串排序,所以我得到: 1, 10, 11, 2, 21 etc... 我注意到关于
是否可以使用 latex 文本创建查科图?例如,如果我们想要 this exampe 标题中的 latex 符号: from traits.api import HasTraits, Instance
我有一个标准的金融时间序列数据,其中包含市场收盘时的缺口。 问题是Chaco显示这些间隙,我可以在 matplotlib 中使用格式化程序,如下所示并应用于 x 轴来解决这个问题,但我不确定我应该在
我有一个 HPlotContainer,默认有 2 个空 LinePlots,使用 create_line_plot() 工厂函数创建。然后我执行一些计算并想更新绘图。如何访问 LinePlot 的
我在 Mac 上有两个具有相同代码和 sys.path 的工作区。一个工作正常,另一个在导入 chaco.shell 时出现问题(导入错误:没有名为 shell 的模块)。 我正在使用 enthoug
我正在尝试与 Chaco 和 pyqt 一起为实验室硬件绘制实时数据采集任务。我之前使用的是 matplotlib,但事实证明它太慢了(我什至尝试过动画)。当我在 pyqt 窗口中嵌入一个 matpl
我有一个 Chaco ToolBarPlot,只是想将 xlabel 设置为“Wavelength”。在 matplotlib 中,显然是: plt.xlabel('Wavelength') 在 Ch
将Chaco嵌入到Qt和Wx中似乎没有问题。有没有人有如何将 Chaco 嵌入 GTK 的示例或想法? 最佳答案 我将 python 与 matplotlib 结合使用。要在 GUI 中插入图形,我需
Python 的 Chaco 绘图工具包包括展示如何动态更新现有绘图的示例。但是,我的应用程序要求我根据数据动态创建和销毁绘图。我刚开始使用 Chaco 和 Traits 进行编程,所以一个简单的示例
我终于开始尝试 Chaco,所以这个问题可能很天真。目前,我正在尝试绘制类型为 numpy.uint8 的非常大的 8 位(也称为灰度或单 channel )图像。似乎无论我做什么,图像都是彩色的。这
我有几组 (x,y) 数据,我想将它们绘制为同一图上的线图。我对 matplotlib 执行此操作没有任何问题,但我无法使用 Chaco 获得相同的结果。代码和输出如下所示。 我的基于 matplot
在此处输入代码我有一个程序,该程序使用嵌入在 pyside (Qt4) GUI 中的 Enthought Chaco 图。它还使用 numpy,但没关系。该程序直接从 Python 在多个平台上运行良
使用下面的最小示例,我得到的大图(大约 110k 点)的线图(使用 python 2.7、numpy 1.5.1、chaco/enable/traits 4.3.0)是这样的: 然而,这很奇怪,因为它
我是一名优秀的程序员,十分优秀!