mainloop() GUI verlassen

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

    Ich bin ein absoluter Python Anfänger. Ich möchte nun ein Bild anzeigen lassen und mit Hilfe einer Variable an verschiedenen Stellen meines Programms den Text im Image verändern.

    Hier habe ich ein TEST Programm dazu erstellt. Dabei habe ich allerdings ein Problem. Die erste Variable wird übergeben und Das Bild wird mit "Hello" in der Mitte angezeigt. Nun kann ich allerdings keinen input mehr in meiner Konsole ausführen, um den Text zu ändern. Kann mir jemand einen Trick zeigen, wie ich auf diese Art und weise bequem einfach in meinem Programm die Variable verändern kann, so dass ich einfach nur diese eine Funktion schreiben muss?

    Wichtig ist, dass das Bild bestehen bleiben soll. Ich will lediglich immer mal wieder den auf das Bild gelegten Text verändern, bei selber Position.

    Vielen Dank:danke_ATDE:

  • :D Nun, leider auch nicht hilfreich. Lediglich eine Antwort, dass es unüblich ist und keine Lösung. Ich mobilisier gerade alles. Habe noch 3 Wochen Zeit und dann muss ein fertiges Programm für eine Ladesäule mit Bildern, eingebundenen UMTS-Stick und zusätzlichen Anmeldesystem mit RFID und PIN-Eingabe stehen. Als Python Neuling eine knappe Zeitspanne

  • Auf den Fehler bin ich selbst auch schon bekommen - Tkinter mag es überhaupt nicht, wenn mehrere "mainloops" parallel laufen.

    Ich habs so gelöst, dass es eine Art "Hauptfenster" gibt mit einem "Hauptframe". Das Hauptfenster wird nur geschlossen, wenn das Programm geschlossen wird, während der Hauptframe bei Bedarf gelöscht wird. Du könntest z.B. am Anfang fest ein Hauptfenster generieren (inkl. des einzigen Mainloops) und das Unterprogramm Label so umschreiben, dass es auf dem Hauptframe arbeitet (z.B. das aktuelle Hauptframe löschen, einen neuen Hauptframe erstellen und darauf das Label erstellen)...

  • Klingt genau, wonach ich suche :) Ich versuche mal zu verstehen, wie genau du das meinst.

    Ich gehe davon aus, dass ich meine Grundsätzlichen Funktionen in einer weiteren Funktion einbinden muss und die Label Funktion nun lediglich für ein bestimmtes Label verwende? So das ich für jedes gewünschte Bild ein Frame erstelle, welches ich dann an den bestimmten Stellen im Programm lade?

  • Ich weiss nicht, was du eigentlich willst :s

    Prinzipiell brauchst du keine GUI sondern willst nur ein paar Bilder auf dem Monitor anzeigen?

    Muss das Bild permanent geöffnet sein oder reicht es, wenn je nach Anmeldung etc. das Bild angezeigt wird?

    Wenn letzteres der Fall sein wird, dann ginge es einfach mit zB

    Python
    from PIL import Image
    
    
    img = Image.open('Test.gif')
    img.show()

    Ansonsten musst du dein Abfrage-Programm in Funktionen unterteilen und diese dann in deinem GUI Programm aufrufen. Mit Tk kenne ich mich nicht aus, bei pyQT könnte ich noch helfen. Dies wird aber schwierig innerhalb von drei Wochen ;)


  • Nun, ich möchte zwar nur ein Bild öffnen und darüber einfach einen Text legen, denn ich je nach Situation im Programm umschreiben kann. Das Bild selbst bleibt dabei dauerhaft offen

    Dann wirst du wohl meiner Meinung nach nicht um ein GUI Bibliothek herum kommen. Da hast du aber einige Baustellen. Eine 'gestartete' GUI von einer Konsole aus steuern ist glaube ich nicht der Sinn einer GUI. Dafür haben sämtliche Bibliothek ihre event handler.

  • Will ich also nicht völlig neu GUI lernen, wäre es das einfachste einfach einzelne Bilder für meine Wünsche zu erstellen und die Anzeigen zu lassen und wenn sie nichtmehr gebraucht werden sie einfach zu schliessen und ein neues aufzurufen? Da müsste ich doch dann als Konsolenprogramm steuern können

  • Also rein theoretisch könntest du schon eine einfache GUI laufen lassen, welche dir das Bild und Text anzeigt. In deinem Hauptprogramm ''returnst'' du - wie dbv es sagen würde - deine Werte und in der GUI läuft ne Schleife, die auf die Werte des Hauptprogramms waren. Diese Werte fängst du ab und verarbeitest sie...


    Ich probier da mal was, mein Chef ist eh heute nicht da...


    EDIT:
    Pillow >= 2.0.0 supports Python versions 2.6, 2.7, 3.2, 3.3, 3.4

  • :) Schicht ohne Chef ist immer das beste.

    Danke dir vielmals bootsman, als kleine Zusatzinfo. Ich habe Python 3 gelernt und auch das Hauptprogramm mit Python 3 geschrieben. Daher geht PIL bei mir auch nicht, dass gibts ja nur in Python 2

  • Wenn du den Text im Terminal eingibst und dieser auf deinem Bild angezeigt werden soll... dann kannst du dir ein Eingabefeld in deiner GUI einrichten und dieses dann mit:

    Code
    text = Bspentry.get()

    und dann dem entsprechenden Verweis auf das Anzeigefenster legen.
    der Text wird in der Funktion aktualisiert und das Bild bleibt.

    Rede wenig, rede wahr, trinke mäßig, zahle bar.:angel:

  • Nun, es soll im Hintergrund ein Konsolenprogramm laufen. Das alles steuert, als gäbe es keine Visualisierung.

    Im Vordergrund soll dann allerdings für den Kunden nicht die Konsole, sondern ein Bild zu sehen sein, welches sich ,je nach Stelle indem sich das Programm befindet, verändert. Wenn der Kunde dann z.B. mit einem Tastenfeld eine Eingabe macht, soll dies normal mit input() geschehen, aber ohne das er die Console sieht. Er soll nur ein Bild mit der Aufforderung zum Eingeben sehen

  • Nun der Sinn ist, dass ich begrenzte Zeit habe und ein Konsolenprogramm erschafft habe. Aber ihr habt recht, ich komme nicht drum herum eine GUI zu schreiben. Also hinsetzen und weitere Überstunden um das zu lernen :) Projekte eben

    Danke euch allen vielmals für die Hilfe. Falls Interesse besteht, kann ich auch gerne mein Programm zum Abfragen des UMTS Sticks per Anruf veröffentlichen. Ich denke, dass wird einigen in Zukunft eine Menge Arbeit ersparen.

    Vielen Dank,

    euer doggy

Jetzt mitmachen!

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