Steuerprogramm mit einer Benutzeroberfläche ergänzen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    meine Solaranlagensteuerung läuft perfekt!
    Das Regelungsprobramm ist in einer while-Schleife.
    Nun möchte ich gerne eine Benutzeroberfläche einbauen.
    Habe bisher nichts mit tkinter gemacht und lese immer nur vom mainloop() der aber mein Programm anhält.
    Werstehe ich das falsch oder muss ich mein Programm ändern?

    P.s. Vielleicht sollte ich noch erwähnen dass ich mich bisher nur über tkinter informiert habe.

    Einmal editiert, zuletzt von Düsentrieb (13. August 2016 um 23:00)

  • Steuerprogramm mit einer Benutzeroberfläche ergänzen? Schau mal ob du hier fündig wirst!

  • Das Programmieren einer grafischen Benutzeroberfläche (GUI = Graphical User Interface) unterscheidet sich z.T. deutlich von rein shellbasierten Programmen. Nur ein kurzer Gedankenanstoss, um das Problem besser verstehen zu können: Normale, in der Shell ablaufende Programmteile können problemlos sequentiell (von oben nach unten) abgearbeitet werden. Bei GUIs geht das alleine deshalb nicht, weil ein Teil des Programms permanent(!) die Bedienelemente (z.B. Buttons, ob diese gedrückt wurden) abfragen und dann darauf reagiert werden muss. In tkinter ist es die "mainloop()", die für diese permanente Abfrage sorgt.

    Das heißt aber auch, dass du nicht einfach eine While-Schleife ohne mainloop laufenlassen kannst, weil sonst nirgends die Bedienelemente der GUI abgefragt werden. Tust du das dennoch, kann die GUI natürlich nicht reagieren und denkt, es sei abgestürzt.

    ---

    Ich würde vorschlagen, erstmal komplett unabhängig von deinem ursprünglichen Programm das eine oder andere Tutorial zu Tkinter-Programmierung zu machen, damit man ein besseres Verständnis für die Herangehensweise bekommt. Eventuell beschäftigst du dich auch noch mit OOP in Python - GUI-Programmierung ist normalerweise nichts, was man nicht ohne OOP machen will^^.

    Einmal editiert, zuletzt von Astorek86 (13. August 2016 um 23:05)


  • meine Solaranlagensteuerung läuft perfekt!
    Das Regelungsprobramm ist in einer while-Schleife.
    Nun möchte ich gerne eine Benutzeroberfläche einbauen.
    Habe bisher nichts mit tkinter gemacht und lese immer nur vom mainloop() der aber mein Programm anhält.
    Werstehe ich das falsch oder muss ich mein Programm ändern?

    Führe dir einfach nur vor Augen wie ein Script aufgebaut und verarbeitet wird.

    Die Verarbeitung sieht vor das Zeile für Zeile von oben nach unten abgearbeitet wird. Führt man ein Script aus wird also zunächst Zeile 1 verarbeitet, wenn das fertig ist Zeile 2, danach Zeile 3 usw.
    Du hast nun ein Script mit einer Schleife. Dh beginnend ab der Zeile in der "while" steht wird der Code immer wieder wiederholt, solange bis entweder die Bedingung der Schleife nicht mehr zutrifft oder eine Unterbrechung stattfindet.
    Steht nach der Schleife etwas wird es nur dann verarbeitet sofern die Schleife nicht mehr verarbeitet wird. Man spricht dann davon dass das Script durch die while blockiert wird. Solange die while beschäftigt ist kann nichts anderes ausserhalb der Schleife verarbeitet werden. Dh deine eine while blockiert alles andere.
    Die "mainloop" ist ebenfalls eine Schleife. Zwei Schleifen können nicht ohne weiteres parallel laufen, nicht in nur einem Thread: Das Script ist ein Thread.
    Es gibt zwar die Möglichkeit andere Sachen aus der Schleife heraus auszuführen also zB Funktionen, das wird dir in diesem Fall aber denk ich nicht helfen.

    Wie immer gibt es mehrere Möglichkeiten.

    Was du machen könntest wäre mehrere Threads in nur einem Script zu nutzen, also ein Thread für deine Schleife und ein anderer Thread für TKinter. Auf die Weise könnten beide Sachen parallel in nur einer Scriptdatei verarbeitet werden und die Kommunikation untereinander wäre einfacher...

    Ich würde dir aber wie Manul auch schon zu einem separaten Script raten sodass beides unabhängig voneinander laufen kann und sich nicht beeinträchtigt.

    Für den Datenaustausch zwischen beiden Programmen käme es auf die Art und Menge der Daten an die du von deinem Steuerprogramm zur GUI schicken möchtest, und andersherum auch: Ob die GUI Einfluss auf dein Steuerprogramm nehmen können soll. :huh:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!