Python Tkinter Embed Matplotlib dans l'interface graphique
Je suis en train d'intégrer une parcelle de terrain dans mon interface graphique Tkinter codé en Python. Je crois que le code ci-dessous réussit à mettre simplement un graphique dans une toile, mais je n'ai pas le contrôle de la toile emplacement au sein de l'interface de la grille. Je veux être en mesure d'avoir un paragraphe de mon GUI être l'intrigue...pas l'intégralité. Comment puis-je poste cette toile widget?
#!/usr/apps/Python/bin/python
import matplotlib, sys
matplotlib.use('TkAgg')
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from Tkinter import *
master = Tk()
master.title("Hello World!")
#-------------------------------------------------------------------------------
f = Figure(figsize=(5,4), dpi=100)
a = f.add_subplot(111)
t = arange(0.0,3.0,0.01)
s = sin(2*pi*t)
a.plot(t,s)
dataPlot = FigureCanvasTkAgg(f, master=master)
dataPlot.show()
dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
#-------------------------------------------------------------------------------
master.mainloop()
source d'informationauteur thenickname
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas d'autres widgets de sorte qu'il est difficile de savoir où vous voulez que d'autres widgets. Voici ce que je peux vous dire que: en faisant
dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
vous demandez Tkinter, afin de remplir l'écran avec l'intrigue. Cela, parce que vous lui demandez de remplir toutes les directions (fill=BOTH
) et de l'étendre à remplir tout l'espace supplémentaire (expand=1
).Cependant, vous pouvez toujours ajouter d'autres widgets.
pack
œuvres de mettre des widgets sur le côté d'un conteneur. Votre conteneur,master
a toujours quatre côtés. Ainsi, par exemple, si vous souhaitez créer une barre d'outils que vous feriez quelque chose comme:Notez que si vous mettez ce code après le code où vous
pack
l'intrigue, la barre d'outils s'affiche sur le fond! C'est parce queTOP
BOTTOM
etc reportez-vous à l'espace laissé par n'importe quel autre widget qui ont déjà étépack
ed. L'intrigue prend le dessus, l'espace qui est au fond. Ainsi, lorsque vous spécifiezTOP
encore, il signifie "en haut de la zone située en dessous de ce qui est déjà au sommet".Donc, vous avez quelques choix. Le meilleur choix est de faire de vos widgets dans l'ordre que vous souhaitez qu'ils apparaissent. Si vous
pack
la barre d'outils en haut, avant de vouspack
l'intrigue, il sera à la barre d'outils qui apparaît au haut. En outre, vous pouvez placer l'intrigue dans le bas plutôt que par le haut et qui permettra de résoudre le problème, trop.Par la façon dont, en général, je créer mes widgets dans un bloc, puis les déposer dans un bloc séparé. Je trouve qu'il rend le code plus facile à maintenir.
Un autre choix qui peuvent s'adapter à votre modèle mental mieux est de
grid
au lieu depack
. Avecgrid
vous pouvez choisir la rangée(s) et de colonne(s) que le widget occupe. Cela rend plus facile de jeter des choses dans une grille, mais à la charge d'avoir à utiliser un peu plus de code.Par exemple, de mettre la barre d'outils en haut et l'intrigue vers le bas ci-dessous, vous pouvez faire:
Avis que les lignes et les colonnes commencent à zéro. Aussi, le "poids" se réfère à la quantité de ce widget se développe par rapport à d'autres widgets. Avec deux rangées de poids égal, il élargit également lorsque la fenêtre est redimensionnée. Un poids de zéro signifie pas d'expansion. D'un poids de 2 pour une ligne, et 1 pour un autre moyen que l'ancien va développer deux fois plus que le dernier.
Pour plus d'informations, voir cette page sur la grilleet cette page sur pack.