Seite 1 von 1

2 Bilder abwechselnd anzeigen

Verfasst: Mittwoch 5. Oktober 2005, 19:54
von Damaskus
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

Verfasst: Mittwoch 5. Oktober 2005, 20:44
von Leonidas
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.

Verfasst: Mittwoch 5. Oktober 2005, 20:55
von Damaskus
ok ich tippe.. :wink:

Verfasst: Mittwoch 5. Oktober 2005, 21:14
von Damaskus
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()

Verfasst: Donnerstag 6. Oktober 2005, 10:05
von gerold
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
:-)

Verfasst: Donnerstag 6. Oktober 2005, 10:17
von Damaskus
funktioniert!
Danke