2 Bilder abwechselnd anzeigen

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

2 Bilder abwechselnd anzeigen

Beitragvon Damaskus » 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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » 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: 890
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Beitragvon Damaskus » Mittwoch 5. Oktober 2005, 20:55

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

Beitragvon Damaskus » 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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » 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: 890
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Beitragvon Damaskus » Donnerstag 6. Oktober 2005, 10:17

funktioniert!
Danke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder