Python3: inbäddning av matplotlib-fönster i tkinter

Permalänk
Medlem

Python3: inbäddning av matplotlib-fönster i tkinter

Hej,

Vet någon hur man bäddar in ett matplotlibfönster i ens huvudfönster i tkinter så att den inte plottar i ett nytt, separat fönster? Har googlat en del och försökt med exemplen på matplotlibs sida utan att lyckas själv.

Det är egentligen ingen konstig plot utan huvuddelen i programmet ser för tillfället ut så här (förkortad version):

import re import matplotlib.pyplot as plt from datetime import date, datetime from tkinter import * import sys def plotta(): plt.plot(x,y) plotGUI=Tk() plotGUI.geometry('800x600') plotGUI.title("test") plotGUI_label = Label(text='text').grid() plotGUI_button = Button(text='Plot', command=plotta).grid() plotGUI.mainloop()

Permalänk
Medlem

Kan fylla på med ytterligare frågor:

#1: Vet någon hur man gör länkade menyer? Försöker använda mig av optionmenus och vill att vad man väljer i lista #1 ska påverka vilka föremål som syns i lista #2, men har ingen framgång med detta ens när jag sökt efter exempel. En del verkar rekommendera Pmw vilket jag ej kan ha tillgång till.

#2: Vet någon hur man kan göra en subplot som uppdaterar sig med ett nytt subplotfönster varje gång man trycker på en knapp? Både den/de gamla och den nya plotten ska visas.

Just nu ser det ut såhär:

class plutt(object): cheese=1 #räknare def subplotta(xxx,yyy): plt.close() #för att döda att den behåller ett gammalt Figure-fönster varje gång man trycker xxx=lista_x #diverse värden för x-axeln yyy=lista_y #diverse värden för y-axeln plt.subplots(plutt.cheese) #subplot 1,2, 3 osv. plt.plot(xxx,yyy) plutt.plotlabels() #en separat metod som ger labels på axlarna plutt.cheese+=1 #inkrement för nästa subplot

Ovanstående anropas med

plotGUI_button2 = Button(text='Subplot (X,Y)', command=lambda:plutt.subplotta(xxx,yyy))

Det funkar såtillvida att den gör en ny subplot varje gång man trycker, problemet är att bara det senaste resultatet visas (lista_x, lista_y), vilket den gör i subplot n (där n är antalet tryckningar). De "gamla" rutorna blir tomma rutor. Har försökt med hold on(True) och lite annat jox utan framgång.