matplotlib mit GUI

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
FelixSilver
User
Beiträge: 3
Registriert: Sonntag 19. Februar 2023, 18:13

Hallo zusammen,

ich bin kompletter Neuling und habe mich seit ein paar Tagen mit Python beschäftig. Mein erstes Programm habe ich bereits geschrieben.

Aktuell schaffe ich es aber nicht den Eingabewert aus dem Grafikfenster "a = entryFF1.get()" in dem 3D Plot darzustellen. Aktuell muss ich diesen direkt in Python Code integrieren a = 5.

Es soll nach dem Bestätigen der ok Taste immer der aktuelle Wert aus "entryFF1" für den 3D-Plot genutzt werden.

Zeile 175-177.

Es wäre super wenn mir jemand von den alten Hasen bei dem Problem helfen könnte.

Schon mal vielen Dank. :-)


import matplotlib.pyplot
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3DCollection
import numpy as np
import matplotlib.animation as anim

from tkinter import *

# Fenster ok button
tk1Fensterok = Tk()
tk1Fensterok.title('load data')
tk1Fensterok.geometry('200x50')

# x-Werte Start


# x-Werte import über okButton



def read_entryFF1():
input = entryFF1.get()
a = input
print('a is repalced by')
print(a)
return a
plt.show()


# okButton
ok_button = Button(tk1Fensterok, text='ok', command=read_entryFF1)
ok_button.pack()



# Fenster Eingabe Werte

tkFenster = Tk()
tkFenster.title('Visualizer 3 Zone Triangulation - Created by Felix')
tkFenster.geometry('625x175')

# Rahmen Punkte FreshFood
frameFF = Frame(master=tkFenster, bg='blue')
frameFF.place(x=5, y=5, width=150, height=165)

# Label mit Überschrift für das Konto
labelUeberschriftFF = Label(master=frameFF,
text=' FF compartment [°C]',bg='white')
labelUeberschriftFF.place(x=5, y=5, width=140, height=20)

# Label mit Beschriftung Punkte für das Konto

labelPunkt1 = Label(master=frameFF,
text=' P1 ',bg='white')
labelPunkt1.place(x=5, y=30, width=20, height=20)

labelPunkt2 = Label(master=frameFF,
text=' P2 ',bg='white')
labelPunkt2.place(x=5, y=60, width=20, height=20)

labelPunkt3 = Label(master=frameFF,
text=' P3 ',bg='white')
labelPunkt3.place(x=5, y=90, width=20, height=20)

labelPunkt4 = Label(master=frameFF,
text=' P4 ',bg='white')
labelPunkt4.place(x=5, y=120, width=20, height=20)

# Eingabefeld1 für FreshFood
entryFF1 = Entry(master=frameFF, bg='white')
entryFF1.place(x=65, y=30, width=20, height=20)
entryFF1.insert(0, "4")

# Eingabefeld2 für FreshFood
entryFF2 = Entry(master=frameFF, bg='white')
entryFF2.place(x=65, y=60, width=20, height=20)

# Eingabefeld3 für FreshFood
entryFF3 = Entry(master=frameFF, bg='white')
entryFF3.place(x=65, y=90, width=20, height=20)

# Eingabefeld4 für FreshFood
entryFF4 = Entry(master=frameFF, bg='white')
entryFF4.place(x=65, y=120, width=20, height=20)

# Rahmen Punkte Chill
frameChill = Frame(master=tkFenster, bg='blue')
frameChill.place(x=160, y=5, width=150, height=165)

# Label mit Überschrift für das Konto
labelUeberschriftChill = Label(master= frameChill,
text=' Chill compartment [°C]',bg='white')
labelUeberschriftChill.place(x=5, y=5, width=140, height=20)

# Eingabefeld1 für Chill compartment
entryChill1 = Entry(master=frameChill, bg='white')
entryChill1.place(x=65, y=30, width=20, height=20)

# Eingabefeld2 für Chill compartment
entryChill2 = Entry(master=frameChill, bg='white')
entryChill2.place(x=65, y=60, width=20, height=20)

# Eingabefeld3 für Chill compartment
entryChill3 = Entry(master=frameChill, bg='white')
entryChill3.place(x=65, y=90, width=20, height=20)

# Eingabefeld4 für Chill compartment
entryChill4 = Entry(master=frameChill, bg='white')
entryChill4.place(x=65, y=120, width=20, height=20)

# Rahmen Punkte FZ
frameFZ = Frame(master=tkFenster, bg='blue')
frameFZ.place(x=315, y=5, width=150, height=165)

# Label mit Überschrift für das Konto
labelUeberschriftFZ = Label(master= frameFZ,
text=' FZ compartment [°C]',bg='white')
labelUeberschriftFZ.place(x=5, y=5, width=140, height=20)

# Eingabefeld1 für Zieltemperatur compartment
entryFZ1 = Entry(master=frameFZ, bg='white')
entryFZ1.place(x=65, y=30, width=20, height=20)

# Eingabefeld2 für Z compartment
entryFZ2 = Entry(master=frameFZ, bg='white')
entryFZ2.place(x=65, y=60, width=20, height=20)

# Eingabefeld3 für Z compartment
entryFZ3 = Entry(master=frameFZ, bg='white')
entryFZ3.place(x=65, y=90, width=20, height=20)

# Eingabefeld4 für Z compartment
entryFZ4 = Entry(master=frameFZ, bg='white')
entryFZ4.place(x=65, y=120, width=20, height=20)

# Rahmen Punkte Z
frameZ = Frame(master=tkFenster, bg='black')
frameZ.place(x=470, y=5, width=150, height=165)

# Label mit Überschrift für das Konto
labelUeberschriftZ = Label(master= frameZ,
text=' target temperatures [°C]',bg='white')
labelUeberschriftZ.place(x=5, y=5, width=140, height=20)

# Eingabefeld1 für Zieltemperatur
entryZ1 = Entry(master=frameZ, bg='white')
entryZ1.place(x=65, y=30, width=20, height=20)

# Eingabefeld2 für Z compartment
entryZ2 = Entry(master=frameZ, bg='white')
entryZ2.place(x=65, y=60, width=20, height=20)

# Eingabefeld3 für Z compartment
entryZ3 = Entry(master=frameZ, bg='white')
entryZ3.place(x=65, y=90, width=20, height=20)

# Label mit Beschriftung Punkte ZT für das Konto

labelPunktZT1 = Label(master=frameZ,
text=' FF ',bg='white')
labelPunktZT1.place(x=5, y=30, width=40, height=20)

labelPunktZT2 = Label(master=frameZ,
text=' Chill ',bg='white')
labelPunktZT2.place(x=5, y=60, width=40, height=20)

labelPunktZT3 = Label(master=frameZ,
text=' FZ ',bg='white')
labelPunktZT3.place(x=5, y=90, width=40, height=20)



# Triangulation-Daten P1-P4 + Zieltemperatur

a = 5
'a = entryFF1.get()'
print(a)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# vertices of a pyramid

v = np.array([[a, 1.8, -18.4], [a, 1.8, -18.4], [4, 2.9, -18], [2.1, 1.1, -16.5], [2.1, 1.1, -20.3]])
ax.scatter3D(v[:, 0], v[:, 1], v[:, 2])
ax.scatter3D(4, 2, -18, color = "red")

ax.text(4, 2, -18, "target temperature", (1, 1, 0), color='black', zorder=10)
ax.text(a, 1.8, -18.4, "point 1", (1, 1, 0), color='blue', zorder=10)
ax.text(4, 2.9, -18, "point 2", (1, 1, 0), color='blue', zorder=10)
ax.text(2.1, 1.1, -16.5, "point 3", (1, 1, 0), color='blue', zorder=10)
ax.text(2.1, 1.1, -20.3, "point 4", (1, 1, 0), color='blue', zorder=10)


# generate list of sides' polygons of our pyramid
verts = [ [v[1],v[1],v[4]], [v[0],v[3],v[4]],
[v[2],v[1],v[4]], [v[2],v[3],v[4]], [v[0],v[1],v[2],v[3]]]

# plot sides
ax.add_collection3d(Poly3DCollection(verts,
facecolors='green', linewidths=0.5, edgecolors='b', alpha=0.7))

ax.set_xlabel('FF')
ax.set_ylabel('Chill')
ax.set_zlabel('FZ')
ax.set_title('tetrahedron for 3-zone appliances')



plt.show()




tkFenster.mainloop()
tk1Fensterok.mainloop()
FelixSilver
User
Beiträge: 3
Registriert: Sonntag 19. Februar 2023, 18:13

Hallo,
ich habe das Problem gelößt ich musste den ganzen Teil mit den Axen und den verts in die def setzen und mit float variablen arbeiten.

Das Thema hat sich somit geklärt.


Liebe Grüße
FelixSilver
User
Beiträge: 3
Registriert: Sonntag 19. Februar 2023, 18:13

Ich habe nun das Problem, dass das Programm nach der Konvertierung in eine exe.Datei über auto-py-to exe nun als exe. nichtmehr funktioniert.

Traceback (most recent call last):
File "main.py", line 2, in <module>
ModuleNotFoundError: No module named 'matplotlib'

Eventuell aht ja jemand eine Idee wie man das Probelm lösen könnte.

Vielen Dank :-)
Antworten