Python / PySide / QT4 - Frage: Messagebox Dialogbox erstellen
Rudi
- sonstiges
Hallo,
ich weiß nicht, ob ich hier richtig bin, aber ich versuchs einfach mal.
Ich versuche mich, in Python ein bischen einzuarbeiten und habe mir als erstes kleines Projekt vorgenommen, einen Timer zu schreiben, der jede Stunde eine Meldung gibt.
Das klappt in der Konsole auch ganz gut.
Nur:
Dazu müsste ich dann die Konsole immer geöffnet halten. Ich möchte aber im Rechner weiter arbeiten und lieber jede Std. ein Popup generieren, das quasi so aussieht, wie eine Messagebox (nur eben ohne Parentfenster).
Geht das (in PySide / bzw. QT4)?
Rudi
Moin,
Ich versuche mich, in Python ein bischen einzuarbeiten und habe mir als erstes kleines Projekt vorgenommen, einen Timer zu schreiben, der jede Stunde eine Meldung gibt.
[...]
Dazu müsste ich dann die Konsole immer geöffnet halten. Ich möchte aber im Rechner weiter arbeiten und lieber jede Std. ein Popup generieren, das quasi so aussieht, wie eine Messagebox (nur eben ohne Parentfenster).
Du kannst am Rechner auch weiter arbeiten, wenn die Konsole offen ist ;)
Geht das (in PySide / bzw. QT4)?
Ja, aber warum Qt4 und nicht gleich Python3 + PyQt5?
Die MessageBox-Klasse von Qt besitzt auch statische Funktionen, die deinen Zweck erfüllen können:
from PyQt5.Qt import *
from PyQt5.QtGui import *
from sys import argv, exit
a = QApplication(argv)
QMessageBox.information(None, 'Information', 'Du bist informiert')
exit(a.exec())
Viele Grüße
Robert
Hallo Robert,
Du kannst am Rechner auch weiter arbeiten, wenn die Konsole offen ist ;)
Richtig, aber der Timer soll sich doch nach x Minuten bei mir melden :)
Geht das (in PySide / bzw. QT4)?
Ja, aber warum Qt4 und nicht gleich Python3 + PyQt5?
Da ich nicht wußte, was ich nehmen sollte, habe ich mich erstmal für das entschieden, was (so meine Recherche) unter LGPL läuft und kam somit zur Kombination Python 3.4 und PsYide (äquivalent zu QT4).
Die MessageBox-Klasse von Qt besitzt auch statische Funktionen, die deinen Zweck erfüllen können:
from PyQt5.Qt import * from PyQt5.QtGui import * from sys import argv, exit a = QApplication(argv) QMessageBox.information(None, 'Information', 'Du bist informiert') exit(a.exec())
Nett gemeint, Robert. Aber damit kann ich ja nicht wirklich etwas anfangen :(
Rudi
Moin Rudi,
Du kannst am Rechner auch weiter arbeiten, wenn die Konsole offen ist ;)
Richtig, aber der Timer soll sich doch nach x Minuten bei mir melden :)
Kennst du die Escapesequenz '\a' bzw. den Beep-Befehl von Windows?
Da ich nicht wußte, was ich nehmen sollte, habe ich mich erstmal für das entschieden, was (so meine Recherche) unter LGPL läuft und kam somit zur Kombination Python 3.4 und PsYide (äquivalent zu QT4).
PySide und PyQt sind nicht äquivalent, sowohl was Funktionsumfang als auch Lizenz angehen.
Nett gemeint, Robert. Aber damit kann ich ja nicht wirklich etwas anfangen :(
Weil?
Viele Grüße
Robert
Hallo Robert,
Kennst du die Escapesequenz '\a' bzw. den Beep-Befehl von Windows?
nein. Bin ja Einsteiger.
PySide und PyQt sind nicht äquivalent, sowohl was Funktionsumfang als auch Lizenz angehen.
Ok. Aber was ist jetzt Dein Rat für mich? Umsteigen? Obwohl ich weder das Eine kenne noch das Andere? Und vor allem: Für mein erstes kleines Testprogrämmchen?
Nett gemeint, Robert. Aber damit kann ich ja nicht wirklich etwas anfangen :(
Weil?
Ich nunmal nicht QT5 nutze. Und bei mir der Code nicht läuft. :-(
Rudi
Moin Rudi,
Kennst du die Escapesequenz '\a' bzw. den Beep-Befehl von Windows?
nein. Bin ja Einsteiger.
Damit kannst du auch bei einem Konsolenprogramm einen Biep ausgeben lassen.
PySide und PyQt sind nicht äquivalent, sowohl was Funktionsumfang als auch Lizenz angehen.
Ok. Aber was ist jetzt Dein Rat für mich? Umsteigen? Obwohl ich weder das Eine kenne noch das Andere? Und vor allem: Für mein erstes kleines Testprogrämmchen?
Da du dich gerade erst einarbeitest, hast du doch noch viel mehr die Freiheit, ohne große Verluste auf etwas Anderes umzuschwenken. Ich empfehle für GUI-Programmierung Qt5 und das ist bislang nur mit PyQt5 von Python aus zu erreichen, Pyside ist noch nicht so weit. Qt5 hat die konsistentere API und wird noch weiter entwickelt, während ich bei Qt4 skeptisch bin, dass es da noch weitergeht.
Das erste Testprogramm kann zur Vermeidung der Komplexität in deinem Fall ein Einzeiler sein:
print('\a')
Und das dann in regelmäßigen Abständen vom Betriebssystem aufgerufen. Oder du baust eine Endlosschleife mit einem sleep (oder ähnlich).
Ich nunmal nicht QT5 nutze. Und bei mir der Code nicht läuft. :-(
Mein Code war auch Qt5, wie beschrieben. Kannst du denn Qt5 und PyQt5 installieren? Und unter welchem Betriebssystem arbeitest du überhaupt?
Viele Grüße
Robert
Hi Robert,
Das erste Testprogramm kann zur Vermeidung der Komplexität in deinem Fall ein Einzeiler sein:
print('\a')
Gibt bei mir in IDLE nur einen blauen Punkt aus. Ich habe es so gelöst.
import winsound
Freq = 800 # Set Frequency To 2500 Hertz
Dur = 1000 # Set Duration To 1000 ms == 1 second
winsound.Beep(Freq,Dur)
Ich nunmal nicht QT5 nutze. Und bei mir der Code nicht läuft. :-(
Mein Code war auch Qt5, wie beschrieben. Kannst du denn Qt5 und PyQt5 installieren? Und unter welchem Betriebssystem arbeitest du überhaupt?
Bestimmt kann ich das, aber es kann ja nicht die Lösung sein, eine neue Entwicklungsumgebung für "so einen Peanuts" zu installieren. Oder ist das tatsächlich mit Python 3.4 und QT4 noch nicht machbar? Das kann doch nicht sein, oder?
Rudi
Moin Rudi,
Ich habe es so gelöst.
import winsound Freq = 800 # Set Frequency To 2500 Hertz Dur = 1000 # Set Duration To 1000 ms == 1 second winsound.Beep(Freq,Dur)
Gut, damit ist dann schon einmal die Frage nach dem verwendeten Betriebssystem gelöst. '\a' ist AFAIK ein POSIX-Ding, funktioniert also unter Linux oder Unix.
Mein Code war auch Qt5, wie beschrieben. Kannst du denn Qt5 und PyQt5 installieren? Und unter welchem Betriebssystem arbeitest du überhaupt?
Bestimmt kann ich das, aber es kann ja nicht die Lösung sein, eine neue Entwicklungsumgebung für "so einen Peanuts" zu installieren. Oder ist das tatsächlich mit Python 3.4 und QT4 noch nicht machbar? Das kann doch nicht sein, oder?
Qt ist keine Entwicklungsumgebung, sondern eine Bibliothek. Du kannst mein Beispiel auch in Qt4 implementieren, aber ich empfinde Qt5 als ausgereifter und zukunftsfähiger. Da die verschiedenen Qt-Hauptversionen zueinander inkompatibel sind, möchte ich dir mit meinem Vorschlag für Qt5 den späteren Umstieg ersparen.
Viele Grüße
Robert
Hi Robert,
Da die verschiedenen Qt-Hauptversionen zueinander inkompatibel sind, möchte ich dir mit meinem Vorschlag für Qt5 den späteren Umstieg ersparen.
Gib mir hierfür etwas Zeit. Ich bin froh, Python+PySide zum Laufen bekomen zu haben. ;)
import sys
import time
from PySide import QtGui
run = input("Start? > ")
mins = 0
# Only run if the user types in "start"
if run == "start":
# Loop until we reach 20 minutes running
while mins != 20:
print (mins)
# Sleep for a minute
time.sleep(60)
# Increment the minute total
mins += 1
# Bring up the dialog box here
app = QtGui.QApplication(sys.argv)
a=QtGui.QMessageBox.information(None,"","Meine Nachricht!")
Macht genau, was ich möchte.
Aber wie bekomme ich das Message-Fenster in den Vordergrund?
Rudi
Moin Rudi,
app = QtGui.QApplication(sys.argv) a=QtGui.QMessageBox.information(None,"","Meine Nachricht!")
Aber wie bekomme ich das Message-Fenster in den Vordergrund?
Muss nicht noch die Eventschleife von Qt mit der Methode exec aufgerufen werden?
a.exec()
Viele Grüße
Robert
Hi Robert,
Muss nicht noch die Eventschleife von Qt mit der Methode exec aufgerufen werden?
a.exec()
Nein. Zumindest ändert es gar nichts, ob ich es zusätzlich notiere oder nicht.
Aber wie bekomme ich das Messagefenster in den Vordergrund? Hast Du eine Idee?
Rudi
Moin Rudi,
Aber wie bekomme ich das Messagefenster in den Vordergrund? Hast Du eine Idee?
Das weiß ich leider auch nicht.
Viele Grüße
Robert
Hallo
Aber wie bekomme ich das Messagefenster in den Vordergrund? Hast Du eine Idee?
Gibt's denn in der Bibliothek keine fertigen Funktionen, um ein Fenster zu aktivieren? Was sagt denn die Dokumentation dazu?
Tschö, Auge
Hi,
Gibt's denn in der Bibliothek keine fertigen Funktionen, um ein Fenster zu aktivieren? Was sagt denn die Dokumentation dazu?
Ich habe bisher nichts dazu gefunden, was dann auch wirklich funktionierte. Nur was nützt ein Fenster, was unbemerkt im Hintergrund aufpopt?
Rudi
Tach!
Dazu müsste ich dann die Konsole immer geöffnet halten. Ich möchte aber im Rechner weiter arbeiten und lieber jede Std. ein Popup generieren, das quasi so aussieht, wie eine Messagebox (nur eben ohne Parentfenster).
Das Programm muss entweder immer laufen oder es muss im Betriebssystem einen Timer geben, der das Programm zur angegebenen Zeit startet.
Wenn ersteres nicht als sichtbares Programm stattfinden soll, braucht es einen Dienst oder Daemon oder wie auch immer das in dem von dir verwendeten Betriebssystem heißt und implementiert ist.
Timersysteme heißen unter Linux crontab oder at oder unter Windows Scheduled Tasks.
dedlfix.
Hi dedlfix,
Das Programm muss entweder immer laufen oder es muss im Betriebssystem einen Timer geben, der das Programm zur angegebenen Zeit startet.
Es darf ja im Hintergrund laufen, das ist nicht mein Problem. Aber es muß sich bei mir melden. Wenn es nur läuft und ich muß es selber immer wieder mal aufmachen, ist es leichter, auf die Uhr zu schauen ;)
Rudi