Hallo,
möchte gerne ein Image in einer Glade GUI ein und ausblenden.
Die GUI wird mit self.builder.add_from_file eingelesen.
Bekomme eine 0/1 meldung von einem GPIO wo nach das Image ein bzw. ausgeblendet werden soll.
Nur wo muss ich die if-Anweisung platzieren das sie immer wieder aufgerufen wird und die GUI nicht blockiert?
Bekomme das einfach nicht hin
Gruss Natz
if Anweisung platzieren für GPIO Abfrage
@Natz: Das wird in einen eigenen Thread müssen und Du musst das „thread safe” mit der GUI kommunizieren. Was man da bei Gtk konkret für machen und beachten muss, kann ich aus dem Kopf jetzt nicht sagen. Die Dokumentation ist Dein Freund.
@Natz: Das ist keine gute Lösung weil das nicht skaliert. Jetzt hast Du die normale Hauptschleife durch Deine ersetzt. Spätestens wenn Du jetzt noch etwas anderes integrieren möchtest, funktioniert das nicht mehr.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Suche doch mal nach "Threading" und "PyGObject" oder "PyGtk" - je nach dem, welches Binding Du verwendest. Vermutlich wird es da bei google einige Treffer geben, die das ganze erklären
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Hi,
also seit dem letzten Post sitze ich Täglich mehrere Stunden vorm Rechner und versuche das Problem zu Lösen.
Ich finde zwar genug bei Google die das erklären aber für mich nicht Plausibel.
Wenn ich die GUI zum laufen bekomme dann funktioniert die untere schleife nicht.
Thread starten mache ich mit:
Wenn mir da einer unter die Arme greifen könnte wäre ich echt Dankbar
Benutze GObject
Gruss
also seit dem letzten Post sitze ich Täglich mehrere Stunden vorm Rechner und versuche das Problem zu Lösen.
Ich finde zwar genug bei Google die das erklären aber für mich nicht Plausibel.
Wenn ich die GUI zum laufen bekomme dann funktioniert die untere schleife nicht.
Code: Alles auswählen
def Thread(self):
while True:
input_value = GPIO.input(10)
if input_value == 1:
self.labelfilter.set_text("OK")
self.image6.hide()
else:
self.labelfilter.set_text("Nachfüllen !!")
self.image6.show()
Code: Alles auswählen
if __name__ == '__main__':
Th1 = Thread(target=filter)
Th1.start()
#GObject.threads_init()
app = MyApp()
app.run()
Benutze GObject
Gruss
- diesch
- User
- Beiträge: 80
- Registriert: Dienstag 14. April 2009, 13:36
- Wohnort: Brandenburg a.d. Havel
- Kontaktdaten:
Ich würde eine Funktion definieren, die den Status abfragt und die GUI entsprechend aktualisiert, und die mit
GLib.timeout_add_seconds regelmäßig aufrufen.
Also irgendwie so was:
GLib.timeout_add_seconds regelmäßig aufrufen.
Also irgendwie so was:
Code: Alles auswählen
def check_gpio()
input_value = GPIO.input(10)
if input_value == 1:
self.labelfilter.set_text("OK")
self.image6.hide()
else:
self.labelfilter.set_text("Nachfüllen !!")
self.image6.show()
return True
GLib.timeout_add_seconds(60, check_gpio)
http://www.florian-diesch.de
Hi und Danke erstmal für die Hilfe hier.
@diesch: Habe Deinen Code getestet. Leider bekomme ich immer ein global name 'self' is not defined error. Obwohl lablefilter und image6 in der Class definiert sind.
Liegt das an der benutzung in einer function?
Mit der print anweisung funktioniert der Code.
@diesch: Habe Deinen Code getestet. Leider bekomme ich immer ein global name 'self' is not defined error. Obwohl lablefilter und image6 in der Class definiert sind.
Liegt das an der benutzung in einer function?
Mit der print anweisung funktioniert der Code.
@Natz: Ja das liegt daran das `self` nicht einfach so aus dem nichts kommt. Vielleicht solltest Du noch mal OOP-Grundlagen durchgehen.
Moin,
hmm hab mir das jetzt zig mal durchgelesen. Hab da mal wieder nen Brett vorm Kopf.
Warum ist self nicht Global definiert bzw. wie definiere ich dann self Global? :K
Sorry für diese art Fragen, aber mittlerweile drängt die Zeit.
Hab mich mit der GUI übernommen und möchte dass einfach nur noch fertig bekommen.
Hier mal mein Konstruktor:
hmm hab mir das jetzt zig mal durchgelesen. Hab da mal wieder nen Brett vorm Kopf.
Warum ist self nicht Global definiert bzw. wie definiere ich dann self Global? :K
Sorry für diese art Fragen, aber mittlerweile drängt die Zeit.
Hab mich mit der GUI übernommen und möchte dass einfach nur noch fertig bekommen.
Hier mal mein Konstruktor:
Code: Alles auswählen
def __init__(self):
self.builder = Gtk.Builder()
self.builder.add_from_file("Window.glade")
self.builder.connect_signals(self)
self.labelfilter = self.builder.get_object("labelfilter")
self.image6 = self.builder.get_object("image6")
@Natz: Wie sollte denn `self` global sein? Das steht für das Objekt auf dem eine Methode aufgerufen wurde. An welches der vielen Objekte die es innerhalb eines Programms gibt, sollte denn ein globales `self` gebunden sein? Soll der Rechner hellsehen und raten welches das richtige sein könnte?
Wenn Du auf die Attribute von dem Objekt mit der gezeigten `__init__()` über `self` zugreifen möchtest, dann sollte das halt keine Funktion sein, sondern eine Methode auf genau diesem Objekt. Dann ist das Objekt was Du für `self` haben möchtest das erste Argument der Methode.
Wenn Du auf die Attribute von dem Objekt mit der gezeigten `__init__()` über `self` zugreifen möchtest, dann sollte das halt keine Funktion sein, sondern eine Methode auf genau diesem Objekt. Dann ist das Objekt was Du für `self` haben möchtest das erste Argument der Methode.
Weil self, abhängig vom Kontext, immer ein anderes Objekt ist. Das kann man unmöglich global definieren. Wenn du den Sinn und Zweck von self nicht verstehst, und damit wohl auch nicht das Konzept von OOP, dann arbeite dich darin ein. Wenn du das nicht verstehst, dann ist jede Hilfe bei dir sinnlos, da man gleich den Code diktieren könnte. Wenn du mit GUIs arbeiten möchtest/musst , dann kommst du um OOP kaum rum.Natz hat geschrieben:Warum ist self nicht Global definiert bzw. wie definiere ich dann self Global? :K
Das Leben ist wie ein Tennisball.
Gebt mir doch bitte mal ein Link.
Aus den Python-Kursen und Tutorials die ich im Netz finde werde ich nicht schlau!
Ich möchte diese GUI (ist für mich privat) erstellen und dann Python wieder vergessen.
Bin ein Mensch der aus Beispielen besser Lernt als aus Texten ohne für mich sinnvolle Beispiele.
Mittlerweile bin ich an einem Punkt wo mir das Diktieren recht wäre.
Wenn ich das im eigenen Script sehe das verstehe ich das wahrscheinlich auch.
Aus den Python-Kursen und Tutorials die ich im Netz finde werde ich nicht schlau!
Ich möchte diese GUI (ist für mich privat) erstellen und dann Python wieder vergessen.
Bin ein Mensch der aus Beispielen besser Lernt als aus Texten ohne für mich sinnvolle Beispiele.
Mittlerweile bin ich an einem Punkt wo mir das Diktieren recht wäre.
Wenn ich das im eigenen Script sehe das verstehe ich das wahrscheinlich auch.