2010-10-02 16 views
2

J'essaye actuellement de tracer une sphère dans une fenêtre tkinter en utilisant matplotlib. Comment puis-je rendre l'affichage carré? J'aimerais que la sphère ait le moins de distorsion possible.Incorporation de Matplotlib dans Tkinter, problèmes d'affichage

Mon code:

#!/usr/bin/env python 
import matplotlib 
matplotlib.use('TkAgg') 

from mpl_toolkits.mplot3d import axes3d,Axes3D 
import matplotlib.pyplot as plt 
from matplotlib import cm 
import numpy as np 
from numpy import arange, sin, pi 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg 
from matplotlib.figure import Figure 

import Tkinter 
import sys 

class ElectronOrbitalGenerator(Tkinter.Tk): 
    def __init__(self,parent): 
     Tkinter.Tk.__init__(self,parent) 
     self.parent = parent 


     self.protocol("WM_DELETE_WINDOW", self.dest) 
     self.main() 

    def main(self): 
     self.fig = plt.figure() 
     ax = Axes3D(self.fig) 

     u = np.linspace(0, 2 * np.pi, 100) 
     v = np.linspace(0, np.pi, 100) 

     x = 10 * np.outer(np.cos(u), np.sin(v)) 
     y = 10 * np.outer(np.sin(u), np.sin(v)) 
     z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) 

     t = ax.plot_surface(x, y, z, rstride=4, cstride=4, color='lightgreen',linewidth=0) 

     self.frame = Tkinter.Frame(self) 
     self.frame.pack(padx=15,pady=15) 

     self.canvas = FigureCanvasTkAgg(self.fig, master=self.frame) 

     self.canvas.get_tk_widget().pack(side='top', fill='both', expand=1) 


     self.canvas._tkcanvas.pack(side='top', fill='both', expand=1) 

     self.btn = Tkinter.Button(self,text='button',command=self.alt) 
     self.btn.pack() 

    def alt (self): 
     print 9 
    def dest(self): 
     self.destroy() 
     sys.exit() 



if __name__ == "__main__": 
    app = ElectronOrbitalGenerator(None) 
    app.title('Embedding in TK') 
    app.mainloop() 

EDIT

J'ai essayé

et a obtenu cette

AttributeError: 'Figure' object has no attribute 'set_figheigth' 
+0

J'ai eu une faute de frappe, il est: set_figheight – tillsten

Répondre

3

Vous pouvez utiliser figsize paramater de pyplot.figure() pour définir la taille de la figure.

par exemple.

self.fig = plt.figure(figsize=(5,5))

+0

Fonctionne parfaitement grâce! – rectangletangle

1

Avez-vous essayé de régler le f attributs de taille igure? fig.set_figwidth et fig.set_figheigh t