PC-Programmierung
›
Thread
Python Graphik mit tkinter und matplotlib
C
chris_
Gast
24.04.2022 12:23
#7044447
Ich versuche gerade Matplotlib-Graphiken in einer tkinter Oberfläche
frei zu positionieren.
Irgendwie wird aber immer nur eine Graphik gezeigt. Wie kann ich beide
Graphen sichtbar machen?
Oder ist es eventuell gar nicht möglich, zwei frei positionierbare
Graphen in der Oberfläche zu haben?
M
Martin
Gast
24.04.2022 12:43
#7044464
Du baust zwei Plots (Figure), die übereinander liegen. So geht es bei
mir:
1 f = Figure ( figsize = ( 3 , 2 ), dpi = 100 )
2 a = f . add_subplot ( 121 )
3 a . plot ([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ],[ 1 , 2 , 1 , 3 , 8 , 9 , 3 , 5 ])
4
5 canvas = FigureCanvasTkAgg ( f , mainWindow )
6 canvas . get_tk_widget (). pack ( padx = 150 , pady = 100 , side = tk . LEFT )
7
8 a2 = f . add_subplot ( 122 )
9 a2 . plot ([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ],[ 5 , 6 , 1 , 3 , 8 , 9 , 3 , 5 ])
10
11 canvas2 = FigureCanvasTkAgg ( f , mainWindow )
12 canvas2 . get_tk_widget (). pack ( padx = 300 , pady = 100 , side = tk . RIGHT )
M
Martin
Gast
24.04.2022 12:44
#7044465
Bzw. du zeigst eigentlich nur Figure 2.
C
chris_
Gast
24.04.2022 14:00
#7044534
Danke für's drauf schauen.
In deiner Version nutzt Du die MatPlotLib-Funkton "subplot", die mehrere
Graphen in eine MatPlotLib-Ausgabe zeichnet. Damit brauch man kein
canvas2, weil nur eine MatPlotLib-Graphik gezeichnet wird.
Das ist nicht, was ich suche, weil ich die zweite Graphik (bzw. beliebig
viele) frei x/y positionieren will.
M
Martin
Gast
24.04.2022 16:13
#7044721
Es scheint, dass deine padx und pady Probleme machen. Wenn ich die so
wie hier reduziere, dann sehe ich zwei Kurven:
1 import matplotlib
2
3 from matplotlib . backends . backend_tkagg import FigureCanvasTkAgg , NavigationToolbar2Tk
4
5 from matplotlib . figure import Figure
6
7 import tkinter as tk
8 from tkinter import ttk
9
10 LARGE_FONT = ( "Verdana" , 12 )
11
12 mainWindow = tk . Tk ()
13 mainWindow . geometry ( "1024x640" )
14
15 # tk.Frame.__init__(mainWindow, parent)
16 label = tk . Label ( mainWindow , text = "Graph Page!" , font = LARGE_FONT )
17 label . place ( x = 600 , y = 50 )
18
19 button1 = ttk . Button ( mainWindow , text = "little button" , command = lambda : controller . show_frame ( StartPage ))
20 button1 . place ( x = 600 , y = 300 )
21
22 f = Figure ( figsize = ( 3 , 2 ), dpi = 100 )
23 a = f . add_subplot ( 111 )
24 a . plot ([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ], [ 1 , 2 , 1 , 3 , 8 , 9 , 3 , 5 ])
25
26 canvas = FigureCanvasTkAgg ( f , mainWindow )
27 canvas . get_tk_widget (). pack ( padx = 10 , pady = 10 , side = tk . LEFT )
28
29 f2 = Figure ( figsize = ( 3 , 2 ), dpi = 100 )
30 a2 = f2 . add_subplot ( 111 )
31 a2 . plot ([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ], [ 5 , 6 , 1 , 3 , 8 , 9 , 3 , 5 ])
32
33 canvas2 = FigureCanvasTkAgg ( f2 , mainWindow )
34 canvas2 . get_tk_widget (). pack ( padx = 10 , pady = 10 , side = tk . LEFT )
35
36 mainWindow . mainloop ()
C
chris_
Gast
24.04.2022 20:34
#7045057
Martin (Gast)
>Es scheint, dass deine padx und pady Probleme machen. Wenn ich die so
>wie hier reduziere, dann sehe ich zwei Kurven:
Ja, bei mir erscheinen damit auch zwei Plot-Windows.
Allerdings hat es überhaupt keinen Einfluss, wenn ichz.B. die Zeile 34
auf eine andere Position ändere:
1 canvas2.get_tk_widget().pack(padx=10, pady=200, side=tk.LEFT)
Es sieht so aus, als wenn der Fenstermanager mit "pack" die
Positionsangaben ignoriert.
C
chris_
Gast
24.04.2022 20:38
#7045065
padx und pady haben beschreiben wohl eher die Abstände der Elemente im
Geometry-Manager als die absolute Position, welche ich gerne festlegen
würde.
C
chris_
Gast
24.04.2022 20:38
#7045067
M
Martin
Gast
24.04.2022 21:13
#7045128
Eine absolute Position in X und Y sollte sich mit ".place" festlegen
lassen. Dazu gibt es viele Beispiele im WWW. Ich habe das bisher nicht
genutzt.
C
chris_
Gast
24.04.2022 21:34
#7045154
>Eine absolute Position in X und Y sollte sich mit ".place" festlegen
>lassen.
Hab ich schon probiert. Aber es sieht so aus, als wenn die Window-Klasse
für PyPlot kein "place" hat.
M
Martin
Gast
25.04.2022 09:00
#7045398
C
chris_
Gast
30.04.2022 05:00
#7050317
Martin
>Dann probier's doch so:
Super, damit geht es.
Danke :-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
Noch kein Account?
Die Registrierung ist kostenlos und dauert nur eine Minute.
Jetzt registrieren