MouseEvent

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
Danie.
User
Beiträge: 6
Registriert: Sonntag 27. Dezember 2015, 21:41

Hallo,

ich suche mich zu tode. Ich find einfach nichts brauchbares.

Und zwar es geht darum:
Ich habe einen Touchscreen an einem Rechner hängen. Der Touchscreen wird als einfache HID-Maus eingebunden, läuft also ohne speziellen Treiber.
Wird nun für x-sekunden keine Eingabe mehr getätigt, soll der Bildschirm auf Screensaver schalten und nach weiteren x-sekunden das Backlight des Monitors ausgeschalten werden. (geschieht per RS232 Kommand)

Die Funktionen zum Ausschalten ist bereits fertig. Ein einfacher Zähler.
Nun muss ich irgendwie diesen Zähler zurücksetzen, wenn der Touchscreen berührt wurde...

Ich finde allerdings nur Methode mittels Tkinter, die nur in einem bestimmten Fenster funktionieren. Dies darf aber nicht present sein, da ich den PC mit dem Touchscreen ja normal benutzen möchte.

Muss also irgendwie die Koordinaten vom system holen, aber wie?
Oder gibt es irgendeine andere Möglichkeit, bei jedem links-klick der Maus die Funktion aufzurufen, die den Zähler auf den Anfangswert zurücksetzt?

Der Code sieht bisher so aus:

Code: Alles auswählen

import time

downCounter = screensaverTimeout = 20     #Countdown Variable; screensaverTimeout = Zeit[s] bis zum Aktivieren des Screensavers
backlightOffDelay = 10                    #Zeit[s], bis Backlight nach dem Aufrufen des Screensaver ausgeschalten wird
backlightState = 1
screensaverState = 0
lastChange = time.time()

#Funktion zur Screensaver / Backlight Steuerung
def standbyHandler(screensaverState, backlightState):
    global downCounter
    print ("timeout Counter: %s" % downCounter)

    if downCounter == 0 or screensaverState == 1:
        screensaverState == 1
        print("Screensaver ON")
        # befehl Screensaver ON

    if downCounter + backlightOffDelay == 0 or backlightState == 0:
        backlightState == 0
        print("Backlight off")
        quit()  #später: RS232 Befehl an Scaler schicken 


#Mainloop
while True:

    # When 1 sec or more has elapsed...
    if time.time() - lastChange > 1:
        lastChange = time.time()
        downCounter -= 1
        standbyHandler(screensaverState, backlightState)

    # Do other stuff, it won't be blocked
    time.sleep(0.1)
    print("looping...")
Ist nur der Basic-Code zum Testen. Die ganzen RS232 Befehle sind noch nicht implementiert!

Noch eine Frage: Wie kann man denn per Script den "Betriebssystem Internen" Screensaver aktivieren?
Nach Möglichkeit sollte dies bei Windows, Linux und Android möglich sein.

Vielen Dank!

Gruß Danie
Zuletzt geändert von Anonymous am Sonntag 27. Dezember 2015, 22:10, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Muss also irgendwie die Koordinaten vom system holen, aber wie?
Du brauchst halt ein Python-Modul, welches die Daten von der Mauseingabe vom System abholt. Kennen tu ich keins, aber es gibt bestimmt eins - die Aufgabe ist ja nicht sonderlich exotisch.
Noch eine Frage: Wie kann man denn per Script den "Betriebssystem Internen" Screensaver aktivieren?
Nach Möglichkeit sollte dies bei Windows, Linux und Android möglich sein.
Du müsstest du mal eine Suchmaschine deiner Wahl bemühen. Ein Suchbegriff wäre z.B. "activate screensaver from python script".

Bei Linux wird das aber IMHO nicht trivial, weil das u.U. noch von der verwendeten Desktopumgebung abhängig ist - und davon gibt es ja mindestens fünf, die gängig sind.

Gruß, noisefloor
Skorab
User
Beiträge: 20
Registriert: Donnerstag 2. Juli 2015, 20:30

Hallo,

ich kenne nur die Event_handler von Pygame:

https://www.pygame.org/docs/ref/event.html
BlackJack

@Skorab: Diese Ereignisse bekommt man aber nur für das Pygame-Fenster, nicht allgemein für das System.

@Danie.: Unter Linux würde ich bei beidem, Mausbewegungen und Bildschirmschoner aktivieren, beim X-Server ansetzen und schauen welche Python-Anbindung da etwas passendes bietet.
Danie.
User
Beiträge: 6
Registriert: Sonntag 27. Dezember 2015, 21:41

Hallo,

vielen Dank für die Antworten. Es wird wohl auf einen Odroid C1 rauslaufen.
Betriebssystem: noch offen. Er kann sowohl Win10, Android und logischerweise auch Linux...

Jetzt ist die Frage wie bekomme ich das möglichst "plattformübergreifend" hin, ohne große Softwareänderungen zu machen, wenn ich doch mal das OS tauschen möchte?

Kennt ihr da eine möglichkeit? Für Linux und Windows ist Python ja quasi Standard. Wie sieht das bei Android aus? Gibt es da irgendwelche Module oder Bibliotheken?

Vielen Dank!

Gruß Daniel
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Wie sieht das bei Android aus? Gibt es da irgendwelche Module oder Bibliotheken?
Gehen tut viel - alles eine Frage des Aufwands. Android unterstützt nativ nur Java und HTML+CSS-JS Apps.
Es gibt Mittel und Weg, mit Python für Android zu entwickeln, aber das ist IMHO ziemlich umständlich.
Für Linux und Windows ist Python ja quasi Standard.
"Standard" ist Python nur bei den meisten Linux-Distros. Bei Win musst du es (bekanntlich) nach installieren. Und auch wenn es um Hardwareerkennung u.ä. geht läuft das unter Linux komplett anders als unter Win.

Gruß, noisefloor
Danie.
User
Beiträge: 6
Registriert: Sonntag 27. Dezember 2015, 21:41

Hallo,

okay. Dann werde ich mich mal an Android probieren. Falls irgendwann mal Windows zum Einsatz kommt, schreibe ich das ganze eben neu. Grundfunktionen, wie die bereits geschriebene sollten auch ohne Änderungen auf den anderen Systemen laufen. Was zu ändern wäre, sind dann wohl die Hardwarespezifischen Sachen...

Wo fange ich mit Android und Python am besten an? Gibt es da schon fertige "Projekte"? Evtl. sogar IDE´s?

Gruß Danie
BlackJack

@Danie.: Warum Android? Also so nach der Info dass das wohl am meisten Umstände macht mit Python‽
Danie.
User
Beiträge: 6
Registriert: Sonntag 27. Dezember 2015, 21:41

@BlackJack: Da es eine Steuerung für eine Musikanlage werden soll, die Nebenher auch noch kleine Spielerreien (APP´s) ermöglichen soll. Außerdem ist der Touchscreensupport (Bedienung, größe der Symbole ect...) einfach besser, wie bei jeder mir bekannten Linux oder Win Distro. Abgesehen davon bin ich nicht gerade ein Fan von Windows10.

Bin mir aber selbst noch nicht ganz sicher, wie ich das letzten Endes machen möchte. Unter anderem wollte ich ein Art "Codeschloss" als zugangskontrolle machen. Direkt im Android bzw. mittels Fenster...
Aber hier würde sich ja der Andorid Eigene Lock-Screen eignen.

Ist irgendwie knifflig :(
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Wo fange ich mit Android und Python am besten an?
IMHO nirgendwo, weil überhaupt nicht zielführend für dich.

Gruß, noisefloor
Danie.
User
Beiträge: 6
Registriert: Sonntag 27. Dezember 2015, 21:41

Hallo,

zunächstmal ernüchtern zu hören.
Wo / Wie würdet ihr denn den Weg gehen?

Linux und Windows sind ungeeignet, da man sie nur bedingt mittels des Touchscreens bedienen kann...
Android ist hier eben perfekt.

Das Script selbst zu schreiben ist nicht das Problem. Es gibt mit SL4A auch die Möglichkeit Python Scripte unter Android laufen zu lassen.
Allerdings habe ich momentan nur eine Virtuelle Box für Android und igrendwie kann man da nicht wirklich testen und es ist alles sehr umständlich...auch die Dokumentation ist nicht wirklich hilfreich.

mir fehlt einfach ein Punkt, wo ich ansetzen kann

Gruß
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

SL4A ist immer unmständlich, IMHO. Python auf Android ist wie gesagt umständlich. Das ist, wie mit einem Segelboot zum Mond fahren. Geht auch, ist aber umständlich und schwierig ;-)

Android bevorzugt - auch schon gesagt worden - Java oder HTML+CSS+JS

Es gibt aber in der Tat cross-plattform GUI Framework, welche auch Android unterstützen. Such' mal nach `python android gui` im Netz.
Linux und Windows sind ungeeignet, da man sie nur bedingt mittels des Touchscreens bedienen kann...
Die Aussage halte ich für gewagt bis falsch. M$ hat eigene Tablets, die unter Windows laufen und per Touchscreen bedienbar sind. Bei Linux kann zumindest Ubuntu definitiv mit Touchscreens umgehen (bei anderen Distros weiß ich's nicht).

Gruß, noisefloor
BlackJack

Bezüglich Touchscreen:Das Kivy-GUI-Rahmenwerk wirbt ja damit mit Touch gut klarzukommen. Ausprobiert habe ich es selber noch nicht, aber das wäre sicher einen Blick Wert.
Danie.
User
Beiträge: 6
Registriert: Sonntag 27. Dezember 2015, 21:41

BlackJack hat geschrieben:Bezüglich Touchscreen:Das Kivy-GUI-Rahmenwerk wirbt ja damit mit Touch gut klarzukommen. Ausprobiert habe ich es selber noch nicht, aber das wäre sicher einen Blick Wert.
Bei Kivy bin ich schon gelandet. Gehe aktuell mit Qpython einige Versuche. Das hat Kivy bereits integriert und erlaubt zudem noch einiges mehr.

Mit Tkinter für Windows habe ich es so hinbekommen:

Code: Alles auswählen

p = Tkinter.Tk()

x, y = p.winfo_pointerxy()
    if x != old_x or y != old_y:
        old_x = x
        old_y = y
        # tu was..
so läuft es unter Windows zumindest ganz zuverlässig.
Aber ich bekomme dennoch den Punkt mit Screensaver einschalten nicht hin.


Warum umbedingt Android? Finde ich einfach am schönsten anzuschauen...und unter Linux und Windows habe ich auch an einigen Punkten Schwierigkeiten...
Außerdem hat Android eingebauten Funktionen zum Setzen des screensaverTimeouts (setScreenTimeout), das Einstellen würde dann nach wie vor im Handy selbst erfolgen. Das Backlight muss ich dann nur ausschalten, wenn getScreenTimeout == setScreenTimeout ist. Das Abfragen der Touch-Eingaben brauch ich dann auch nicht mehr, da dies vom System erledigt wird.
Wie das unter Windows oder Linux funktioniert, weiß ich nicht!


Ich werde vermutlich eine gesonderte App zum Einstellen der Parameter schreiben (Kivy) und ein Background Service (qpython), der die
Hardware-Steuerung (Backlight an/aus usw...) übernimmt.
Die Frage ist nun, wie kann ich ein Background Script laufen lassen und wie bekomm ich die Paarameter, die mit der App einstellbar sind in das laufende Script importiert?
Einfache Datei ala config?


Gruß Danie
Antworten