Informationen nacheinander an ein Widget leiten

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Freitag 10. Dezember 2004, 11:12

Hallo.

Ich steh gerde voll auf dem Schlauch und mir fällt einfach keine Lösung ein.

Habe hier ein Fenster, in dem sich ein TextView befindet und drei Buttons.

In dem TextView soll unterschiedlicher Text (wird aus Dateien gelesen) angezeigt werden.

Wird button1 gedrückt, soll vorher noch etwas gemacht werden, bei button2 soll nur die nächste Datei angezeigt werden und bei button3 soll das Ganze abgebrochen werden.

Nun häng ich aber an der Schleife, mit der die Dateien eingelesen werden.

Ich dachte, dass ich es ähnlich wie in der Bash lösen könnte.

Code: Alles auswählen

for item in [datei1, datei2, datei3, etc]:
    textbuffer1.insert_at_cursor(datei1.read())
Aber damit wird ja jede Datei auf einmal im TextView dargestellt. Eigentlich sollte das Fenster in dieser Schleife mit erzeugt werden. Dann hab ich aber für jede Datei ein seperates Fenster, was ich auch nicht möchte.

Eigentlich soll ja nur folgendes passieren:
  • Wenn Fenster geöffnet wird, lese erste Datei.
    Wenn Button1 gedrückt wird, führe sonstwas aus (muss mich noch entscheiden, was genau) und zeige danach die nächste Datei an.
    Wenn Button2 gedrückt wird, zeige nächste Datei an.
    Wenn Button3 gedrückt wird, schließe das Fenster ohne noch etwas zu machen.
Natürlich soll das Textfeld geleert werden, bevor die neue Datei angezeigt wird. Aber das würde kein Problem darstellen, wenn mir endlich einfallen würde, wie ich diese Schleife aufbauen muss.

Button3 ist absolut kein Problem. Nur halt die Schleife für Button1 und Button2.

Könnt ihr mir einen Tipp geben, wie man diese Schleife am Besten aufbaut? Und was für eine Schleife. while oder for?

Hab beide Typen bereits probiert. Auch Variabeln habe ich schon eingesetzt, um den Ablauf zu steuern. Aber entweder falsch oder es funktioniert prinzipell nicht.

Irgendwie ist das nicht meine Woche für Python. :cry:

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

Freitag 10. Dezember 2004, 13:17

Du machst beim Click des Buttons2 eine Funktion, die das Textfeld löscht, und die nächste Datei anzeigt (vorher aus einer variable lesen welche das ist) und dann die Variable so einstellt, dass die nächte Datei verlinkt ist.

Okay, da das etwas unklar ist:

Code: Alles auswählen

#!/usr/bin/env python 
# -*- Encoding: latin-1 -*-
import gtk

class TestWindow:
    dateien = ['1.txt', '2.txt', '3.txt']
    
    def clear(self):
        self.tbuf.set_text("")
    
    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False 
    
    def oneclick(self, widget, data=None):
        self.clear()
    
    def twoclick(self, widget, data=None):
        try:
            dateiname = self.dateien.pop(0)
        except IndexError:
            self.tbuf.set_text("Das war's")
            return False
        print dateiname
        datei = file(dateiname)
        inhalt = datei.read()
        datei.close()
        self.tbuf.set_text(inhalt)
        
    
    def threeclick(self, widget, data=None):
        gtk.main_quit()
    
    def __init__(self):
        self.window = gtk.Window()
        self.window.connect("delete_event", self.delete_event)
        self.window.set_border_width(10)
        
        self.box = gtk.VBox(False, 0)
        self.window.add(self.box)
        
        self.tv = gtk.TextView()
        self.box.pack_start(self.tv, True, True, 0)
        self.tv.show()
        self.tbuf = self.tv.get_buffer()
        
        self.button1 = gtk.Button(u"Löschen")
        self.button1.connect("clicked", self.oneclick, "button 1") 
        self.box.pack_start(self.button1, True, True, 0)
        self.button1.show() 
        
        self.button2 = gtk.Button(u"Nächste Datei")
        self.button2.connect("clicked", self.twoclick, "button 1") 
        self.box.pack_start(self.button2, True, True, 0)
        self.button2.show() 
        
        self.button3 = gtk.Button("Beenden")
        self.button3.connect("clicked", self.threeclick) 
        self.box.pack_start(self.button3, True, True, 0)
        self.button3.show() 
        
        self.box.show()
        self.window.show()

test = TestWindow()
gtk.main()
My god, it's full of CARs! | Leonidasvoice vs Modvoice
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Freitag 10. Dezember 2004, 20:05

Super, und danke für die Mühe.

liste.pop(0) war genau das, was ich gebraucht habe.

Keine Ahnung, warum mir das nicht eingefallen ist. :?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 10. Dezember 2004, 20:44

Klar, kein Problem, ern geschehen. So weiß ich wenigstens wieder warum ich GTK+ mag :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten