Diagram in Formular einbinden

Fragen zu Tkinter.
Antworten
Duesentrieb
User
Beiträge: 52
Registriert: Sonntag 16. März 2014, 17:14

Hallo,
ich komme einfach nicht weiter.
Ich möchte in dem nachfolgenden Codeausschnit das Diagramm in das vorhandene Formular einbinden.
Ich habe bereits unzählige Seiten durchsucht, verstehe es aber offensichtlich nicht wie die Verbindung zum Formular erfolgen muss.
Es gehen immer zwei Formulare auf:

Code: Alles auswählen

'#!/usr/bin/env python
# coding: UTF-8

import queue as qu
import tkinter as tk

import matplotlib.pyplot as plt
import pandas as pd
import scipy
import numpy
import matplotlib

from contextlib import redirect_stdout
from tkinter.scrolledtext import ScrolledText
from tkinter import *

import sys
import mysql.connector as mc
import _thread
import smbus
import json



def Diagram():
    Quartal = ['1', '2', '3', '4','5', '6', '7', '8']
	Mess_min = [19.6, 24.1, 26.7, 28.3, 27.5, 30.5, 32.8, 33.1]
	Mess_max = [24.8, 28.9, 31.3, 33.0, 34.9, 35.6, 38.4, 39.2]
    plt.xlabel('Monat')
    plt.ylabel('Wasserbedarf')
    plt.plot(Quartal, Mess_max,
             Quartal, Mess_max, "oy",
             Quartal, Mess_min,
             Quartal, Mess_min, "or")
    plt.show()



Fenster=Tk()
Fenster.title("Steuerung")
Fenster.geometry("1000x600+30+30")
Diagram()


_thread.start_new(aktualisieren,())
Fenster.mainloop()
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Duesentrieb: Die She-Bang-Zeile deutet auf Python 2 hin, der Code ist dann aber für Python 3. Was er auch sein sollte, also fehlt da eine 3 in der She-Bang-Zeile.

Es gibt ein paar Importe mit üblichen Abkürzungen — `queue` gehört da nicht zu.

`tkinter` als `tk` gehört dazu, das sollte man dann aber auch verwenden statt den gesamten Inhalt dieses Moduls und alles was das Modul seinerseits importiert mit einem bösen™ Sternchenimport noch mal in den Modulnamensraum abzukippen.

`_thread` ist wie der führende Unterstrich klar zeigt kein öffentliches Modul das man verwenden darf. Die offizielle API ist im `threading`-Modul.

Ansonsten wird da ziemlich viel von den Importen gar nicht verwendet.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

`diagram` ist ein guter Name für ein Objekt das ein Diagramm repräsentiert, weniger gut für eine Funktion. Funktionen und Methoden werden üblicherweise nach der Tätigkeiten benannt die sie durchführen.

Eine Liste mit Zahlen 1 bis 8 ist kein Quartal (Einzahl).

`Mess` heisst auf Deutsch so viel wie Unordnung, Sauerei, Durcheinander. Abkürzungen sind doof!

`aktualisieren` ist nirgends definiert.

Zwischenstand:

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk
from threading import Thread

import matplotlib.pyplot as plt


def show_plot():
    monate = ["1", "2", "3", "4", "5", "6", "7", "8"]
    wasserbedarf_min = [19.6, 24.1, 26.7, 28.3, 27.5, 30.5, 32.8, 33.1]
    wasserbedarf_max = [24.8, 28.9, 31.3, 33.0, 34.9, 35.6, 38.4, 39.2]
    plt.xlabel("Monat")
    plt.ylabel("Wasserbedarf")
    plt.plot(
        monate,
        wasserbedarf_max,
        monate,
        wasserbedarf_max,
        "oy",
        monate,
        wasserbedarf_min,
        monate,
        wasserbedarf_min,
        "or",
    )
    plt.show()


def main():
    root = tk.Tk()
    root.title("Steuerung")
    show_plot()

    Thread(target=aktualisieren, daemon=True).start()
    root.mainloop()


if __name__ == "__main__":
    main()
Falls Du mit ”Formulare” eigentlich Fenster meinst — in der Matplotlib-Dokumentation gibt es in der Gallerie einen eigenen Abschnitt zum einbetten in verschiedene GUI-Rahmenwerke. Unter anderem auch für Tk.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

Vielleicht sollte man noch erwähnen, dass Threads und GUI keine gute Kombination sind, und es da viele Stolpersteine gibt.
Antworten