Ich versuche gerade ein bisschen mit pyqt4, matplotlib rumzuspielen und habe mal einen kleinen 3D-Plot gebastelt(hier).
Leider kann ich den 3D-Plot nur drehen und vergroessern, solange nicht resizeEvent aufgerufen wurde.
Irgendwas fehlt also noch, aber ich komme einfach nicht drauf was.
Wenn es hilft, kann ich die 80 Zeilen auch noch ein wenig "eindampfen".
Matplotlib Pyqt4 resizeEvent -> kein 3D drehen mehr moegl
Es scheint irgendwo hier zu haken:
Leider resized ohne diese beiden Zeilen nur der Plot nutzlos im Hintergrund, der Vordergrund bleibt grau.
Code: Alles auswählen
self.canvas = FigureCanvas(self.fig)
self.canvas.setParent(self)
Ok, das Problem scheint irgendwie mehr ein grundsaetzliches zu sein. Ich hab jetzt mal alle absoluten Groessen herausgelassen, aber ich kann noch immer nicht vernuenftig resizen. Konkret: Ich kann nur bis 583x459 Pixel korrekt resizen, danach vergroessert sich zwar noch der Plot an sich, aber im Qt Fenster bleibt die gezeigte Flaeche auf dieser Groesse (der Plot wird also vom grau ueberdeckt)
Kann das mal jemand auf einem anderen Rechner ueberpruefen?
Kann das mal jemand auf einem anderen Rechner ueberpruefen?
Code: Alles auswählen
#!/usr/bin/env python
from __future__ import division
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from numpy import *
from scipy.integrate import odeint
import mpl_toolkits.mplot3d as p3
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class MyForm(QMainWindow):
def __init__(self, parent = None):
super(MyForm, self).__init__(parent)
self.plot = LorenzPlot()
self.setCentralWidget(self.plot)
class LorenzPlot(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
self.fig = Figure()
self.ax = p3.Axes3D(self.fig)
self.canvas = FigureCanvas(self.fig)
self.canvas.setParent(self)
def resizeEvent(self, ev):
self.ax.clear()
self.canvas.draw()
self.fig.set_size_inches(self.size().width()/self.fig.get_dpi(),
self.size().height()/self.fig.get_dpi())
self.draw_plot()
print self.fig.get_size_inches()*self.fig.get_dpi()
print self.size()
def Lorenz(self, w, t, s, r, b):
x, y, z = w
return array([s*(y-x), r*x-y-x*z, x*y-b*z])
def draw_plot(self, s=8.0, r=28.1, b=8/3.0):
# Parameters
self.s, self.r, self.b = s, r, b
self.w_0 = array([0., 0.8, 0.]) # initial condition
self.time = arange(0., 100., 0.01) # time vector
#integrate a system of ordinary differential equations
self.trajectory = odeint(self.Lorenz, self.w_0, self.time, args=(self.s, self.r, self.b))
self.x = self.trajectory[:, 0]
self.y = self.trajectory[:, 1]
self.z = self.trajectory[:, 2]
self.ax = p3.Axes3D(self.fig)
self.ax.plot3D(self.x, self.y, self.z)
self.canvas.draw()
if __name__ == '__main__':
app = QApplication(sys.argv)
form = MyForm()
form.show()
sys.exit(app.exec_())