2 Bilder abwechselnd anzeigen

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Benutzeravatar
Damaskus
Administrator
Beiträge: 909
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Mittwoch 5. Oktober 2005, 19:54

Hallo,
ich will! ;-) dass zwei Bilder in einer beliebigen Frequenz abwechselnd angezeigt werden. Hier mal mein erster Versuch:

Code: Alles auswählen

      fixed = gladedatei.get_widget('alarm_fixed')
      hintergrund = gtk.Image()
      bild_verz_1 = "1.jpg"
      bild_verz_2 = "2.jpg"
      if wechsel == "0":
        bild = bild_verz_1
        wechsel = "1"
      else:
        bild = bild_verz_2
        wechsel = "0"
      hintergrund.set_from_file("%s" % bild)
      fixed.put(hintergrund, 0, 0)
      fixed.show_all()
      w = 0.1
      milli = w * 1000
      milli = int(milli)
      gobject.timeout_add( milli, self.hintergrund_bild)
Funktioniert soweit auch!
Nur ist das Problem das er mir die Bilder jedes mal neu lädt und in den Speicher schreibt. Was irgendwann dazu führt, dass der Rechner anfängt zu streiken.

Gibt es auch eine möglichkeit die Bilder einfach nur ein bzw. auszubleden?
Oder irgendeine andere möglichkeit so etwa zu realisieren?

Mfg
Damaskus
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 5. Oktober 2005, 20:44

Ich könnt mir das mal ansehen - wenn du ein funktionsfähiges (minimales) Programm postest.. (am besten ohne Glade). Sonst muss ich erst einen Rahmen drumrum bauen, worauf ich heute keine Lust habe - morgen wieder.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Damaskus
Administrator
Beiträge: 909
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Mittwoch 5. Oktober 2005, 20:55

ok ich tippe.. :wink:
Benutzeravatar
Damaskus
Administrator
Beiträge: 909
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Mittwoch 5. Oktober 2005, 21:14

Sollte funktionieren...

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import pygtk
pygtk.require("2.0")
import gtk
import gobject
class test:

  wechsel = "0"
  fix = gtk.Fixed()
  
  def __init__(self):
    w = gtk.Window(gtk.WINDOW_TOPLEVEL)
    w.connect("destroy", gtk.main_quit)
    w.add(test.fix)
    self.hintergrund_bild()
    w.show_all()

  def hintergrund_bild(self):
    hintergrund = gtk.Image()
    bild_verz_1 = "1.jpg"
    bild_verz_2 = "2.jpg"
    if test.wechsel == "0":
      bild = bild_verz_1
      test.wechsel = "1"
    else:
      bild = bild_verz_2
      test.wechsel = "0"
    hintergrund.set_from_file("%s" % bild)
    test.fix.put(hintergrund, 0, 0)
    test.fix.show_all()
    frequenz = 2
    frequenz = frequenz * 1000
    gobject.timeout_add( frequenz, self.hintergrund_bild)

test()
gtk.main()
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 6. Oktober 2005, 10:05

Hi!

So sollte es funktionieren:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import pygtk
pygtk.require("2.0")
import gtk
import gobject


class Testklasse:

  def change_hintergrund_bild(self):
    if self.wechsel == 0:
      self.wechsel = 1
      self.hintergrund2.hide()
      self.hintergrund1.show()
    else:
      self.wechsel = 0
      self.hintergrund1.hide()
      self.hintergrund2.show()
    
    # Es muss True zurück gegeben werden, damit die Funktion
    # wieder aufgerufen wird. Sonst endet die Schleife.
    return True
  

  def __init__(self):
    # Window
    w = gtk.Window(gtk.WINDOW_TOPLEVEL)
    w.connect("destroy", gtk.main_quit)
    # Fixed
    fix = gtk.Fixed()
    w.add(fix)
    # Hintergrund vorbereiten
    self.hintergrund1 = gtk.Image()
    self.hintergrund2 = gtk.Image()
    fix.put(self.hintergrund1, 0, 0)
    fix.put(self.hintergrund2, 0, 0)
    # Hintergrundbilder nur einmal laden
    bild1 = "1.jpg"
    bild2 = "2.jpg"
    self.hintergrund1.set_from_file("%s" % bild1)
    self.hintergrund2.set_from_file("%s" % bild2)
    # Flag setzen und alles anzeigen
    self.wechsel = 0
    w.show_all()
    # Funktion im Intervall aufrufen lassen
    frequenz = 1000 * 2
    gobject.timeout_add(frequenz, self.change_hintergrund_bild)


if __name__ == "__main__":
  Testklasse()
  gtk.main()
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Damaskus
Administrator
Beiträge: 909
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Donnerstag 6. Oktober 2005, 10:17

funktioniert!
Danke
Antworten