Das deutsche Python-Forum

10 Jahre Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Mittwoch 1. Oktober 2014, 14:12

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Matplotlib Pyqt4 resizeEvent -> kein 3D drehen mehr moegl
BeitragVerfasst: Dienstag 20. April 2010, 20:18 
User

Registriert: Montag 1. Januar 2007, 18:23
Beiträge: 116
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".


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mittwoch 28. April 2010, 16:48 
User

Registriert: Montag 1. Januar 2007, 18:23
Beiträge: 116
Es scheint irgendwo hier zu haken:

  1. self.canvas = FigureCanvas(self.fig)
  2. self.canvas.setParent(self)
  3.  
Highlighting by GeSHi


Leider resized ohne diese beiden Zeilen nur der Plot nutzlos im Hintergrund, der Vordergrund bleibt grau.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Donnerstag 29. April 2010, 16:09 
User

Registriert: Montag 1. Januar 2007, 18:23
Beiträge: 116
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?

  1. #!/usr/bin/env python
  2.  
  3. from __future__ import division
  4. import sys
  5. from PyQt4.QtGui import *
  6. from PyQt4.QtCore import *
  7. from numpy import *
  8. from scipy.integrate import odeint
  9. import mpl_toolkits.mplot3d as p3
  10. from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
  11. from matplotlib.figure import Figure
  12.  
  13. class MyForm(QMainWindow):
  14.     def __init__(self, parent = None):
  15.         super(MyForm, self).__init__(parent)
  16.         self.plot = LorenzPlot()
  17.         self.setCentralWidget(self.plot)
  18.  
  19. class LorenzPlot(QWidget):
  20.     def __init__(self, *args):
  21.         QWidget.__init__(self, *args)
  22.        
  23.         self.fig = Figure()
  24.         self.ax = p3.Axes3D(self.fig)
  25.         self.canvas = FigureCanvas(self.fig)
  26.         self.canvas.setParent(self)
  27.    
  28.     def resizeEvent(self, ev):
  29.         self.ax.clear()
  30.         self.canvas.draw()
  31.         self.fig.set_size_inches(self.size().width()/self.fig.get_dpi(),
  32.                 self.size().height()/self.fig.get_dpi())
  33.         self.draw_plot()
  34.         print self.fig.get_size_inches()*self.fig.get_dpi()
  35.         print self.size()
  36.  
  37.     def Lorenz(self, w, t, s, r, b):
  38.         x, y, z = w
  39.         return array([s*(y-x), r*x-y-x*z, x*y-b*z])
  40.  
  41.     def draw_plot(self, s=8.0, r=28.1, b=8/3.0):
  42.         # Parameters
  43.         self.s, self.r, self.b = s, r, b
  44.        
  45.         self.w_0 = array([0., 0.8, 0.])         # initial condition
  46.         self.time = arange(0., 100., 0.01)      # time vector
  47.         #integrate a system of ordinary differential equations
  48.         self.trajectory = odeint(self.Lorenz, self.w_0, self.time, args=(self.s, self.r, self.b))
  49.        
  50.         self.x = self.trajectory[:, 0]
  51.         self.y = self.trajectory[:, 1]
  52.         self.z = self.trajectory[:, 2]
  53.        
  54.         self.ax = p3.Axes3D(self.fig)
  55.         self.ax.plot3D(self.x, self.y, self.z)
  56.         self.canvas.draw()
  57.  
  58. if __name__ == '__main__':
  59.     app = QApplication(sys.argv)
  60.     form = MyForm()
  61.     form.show()
  62.     sys.exit(app.exec_())
  63.  
Highlighting by GeSHi


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de