python – 在多个地方嵌入matplotlib小部件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在多个地方嵌入matplotlib小部件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2024字,纯文字阅读大概需要3分钟。
内容图文
![python – 在多个地方嵌入matplotlib小部件](/upload/InfoBanner/zyjiaocheng/776/cc61e18711db4147b1f1a44e2bd4afd3.jpg)
我有一个matplotlib图,我想在两个单独的窗口中重复,在PyQt4下.我已经尝试将小部件添加到两者的布局中,但随后小部件从第一个小部件消失.有没有办法做到这一点,除了创建两个相同的图表并保持同步?
解决方法:
问题是你不能将相同的qt小部件添加到两个不同的父窗口小部件,因为在添加小部件Qt的过程中,还会创建一个重复的过程,它会执行您所看到的内容:
… the widget vanishes from the first one[window]…
因此,解决方案是制作两个共享相同图形的画布.
这是一个示例代码,这将显示两个主窗口,每个窗口有两个画布,四个图将同步:
import sys
from PyQt4 import QtGui
import numpy as np
import numpy.random as rd
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
class ApplicationWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.main_widget = QtGui.QWidget(self)
vbl = QtGui.QVBoxLayout(self.main_widget)
self._fig = Figure()
self.ax = self._fig.add_subplot(111)
#note the same fig for two canvas
self.fc1 = FigureCanvas(self._fig) #canvas #1
self.fc2 = FigureCanvas(self._fig) #canvas #1
self.but = QtGui.QPushButton(self.main_widget)
self.but.setText("Update") #for testing the sync
vbl.addWidget(self.fc1)
vbl.addWidget(self.fc2)
vbl.addWidget(self.but)
self.setCentralWidget(self.main_widget)
@property
def fig(self):
return self._fig
@fig.setter
def fig(self, value):
self._fig = value
#keep the same fig in both canvas
self.fc1.figure = value
self.fc2.figure = value
def redraw_plot(self):
self.fc1.draw()
self.fc2.draw()
qApp = QtGui.QApplication(sys.argv)
aw1 = ApplicationWindow() #window #1
aw2 = ApplicationWindow() #window #2
aw1.fig = aw2.fig #THE SAME FIG FOR THE TWO WINDOWS!
def update_plot():
'''Just a random plot for test the sync!'''
#note that the update is only in the first window
ax = aw1.fig.gca()
ax.clear()
ax.plot(range(10),rd.random(10))
#calls to redraw the canvas
aw1.redraw_plot()
aw2.redraw_plot()
#just for testing the update
aw1.but.clicked.connect(update_plot)
aw2.but.clicked.connect(update_plot)
aw1.show()
aw2.show()
sys.exit(qApp.exec_())
内容总结
以上是互联网集市为您收集整理的python – 在多个地方嵌入matplotlib小部件全部内容,希望文章能够帮你解决python – 在多个地方嵌入matplotlib小部件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。