Seite 1 von 1
PyQt und QML (Farbwechsel eines QFrames)
Verfasst: Sonntag 8. Januar 2012, 08:46
von Trubinial Guru
Hallo alle,
ich suche nach einer Möglichkeit die Hintergrundfarbe eines QFrames in einer Animation zu wechseln. So soll das QFrame zum Beispiel ganz Transparent sein und dann langsam rot werden.
Bei meiner Suche bin ich auf das mir bisher unbekannte QML gestoßen, welches die Funktion ColorAnimation beinhaltet. Mit dieser Funktion sollte mir dies, soweit ich das sehe, möglich sein. Das Problem ist nur, dass ich nicht verstehe, wie ich QML in Python integrieren kann, beziehungsweise wie ich die ColorAnimation auf das QFrame anwenden kann.
Ich würde mich freuen, wenn mir jemand da unter die Arme greift und vllt. einen kleinen Beispielcode postet. Auch bin ich natürlich offen für weitere Vorschläge, wie ich mein Ziel erreiche ...
Liebe Grüße
Re: PyQt und QML (Farbwechsel eines QFrames)
Verfasst: Sonntag 8. Januar 2012, 14:38
von lunar
@Trubinial Guru: Du kannst "ColorAnimation" gar nicht auf "QFrame" anwenden. QML ist ein eigenständiges System für graphische Oberflächen, und hat per se nichts mit "QWidget"-Steuerelementen zu tun. "ColorAnimation" ist ein Element aus der QML-Sprache, welches mithin auch nur in dieser Sprache verwendet werden kann. QML kann allerdings nur QML-basierte Oberfläche beschreiben, und keine "QWidget"-Steuerelemente wie "QFrame". Anders gesagt: QML-Animationen kannst Du nur auf QML-Elemente anwenden. Dazu musst Du Deine Oberfläche mithin auch vollständig in QML schreiben.
Um "QWidget"-Steuerelemente zu animieren, gibt es
"QAbstractAnimation" und davon abgeleitete Klassen. In Deinem Fall hilft Dir das allerdings nur bedingt, da es keine direkte Möglichkeit gibt, die Hintergrundfarbe von "QWidget"-Objekten zu verändern. Man muss vielmehr die Farbpalette des entsprechenden Steuerelements anpassen, was von der zur Verfügung gestellten Animationsklassen nicht unterstützt wird.
Langer Rede, kurzer Sinn: Du musst diese Animation für "QFrame" wohl oder übel selbst implementieren. Alternativ implementierst Du die graphische Oberfläche vollständig in QML.
Re: PyQt und QML (Farbwechsel eines QFrames)
Verfasst: Sonntag 8. Januar 2012, 19:09
von Trubinial Guru
Vielen Dank für die Infos! Das hat mir wohl noch eine menge rumgesuche erspart. Wie konnte denn so eine Implementierung aussehen?
Re: PyQt und QML (Farbwechsel eines QFrames)
Verfasst: Sonntag 8. Januar 2012, 19:42
von lunar
@Trubinial Guru: Ist das nicht offensichtlich? Du nutzt einen QTimer, um die Hintergrundfarbe des Frames periodisch zu aktualisieren, bis Du bei der gewünschten Farbe angekommen bist.
Re: PyQt und QML (Farbwechsel eines QFrames)
Verfasst: Montag 9. Januar 2012, 04:37
von Trubinial Guru
Die Classe war mir auch noch unbekannt - aber sie ist ja echt nützlich. Ich hatte mir ja schon fast überlegt nen QThread zu machen, aber das ist viel zu umständlich und irgendwie auch unpassend.
Ich hab es also mit deiner Empfehlung gelöst :
Code: Alles auswählen
global frame
frame=-1
global alpha
alpha=0
self.timer=QtCore.QTimer()
self.connect(self.timer, QtCore.SIGNAL('timeout()'), self.update_color_animation)
self.timer.start(6)
Code: Alles auswählen
def update_color_animation(self):
global frame
global alpha
frame=frame+1
if frame!=0 and frame<=17:
alpha=alpha+15
if frame!=0 and frame>=17:
alpha=alpha-15
self.frame.setStyleSheet("background-color: rgb(85, 255, 0,%s);"%(str(alpha)))
if frame==33:
frame=0
self.timer.stop()
Es Funktioniert super - vielen Dank!
Re: PyQt und QML (Farbwechsel eines QFrames)
Verfasst: Montag 9. Januar 2012, 08:14
von BlackJack
@Trubinial Guru: Jetzt musst Du nur noch das ``global`` loswerden…