Seite 1 von 1

TextView füllen & leeren

Verfasst: Mittwoch 17. August 2005, 07:40
von dusselmann
Hallo,

ich hab in meiner GTK-Anwendung ein Textfeld, welches kontinuierlich mit Informationen gefüllt werden soll. D.h. über verschiedene Funktionen im Programm sollen hier neue Inhalte gepostet werden. Mit der jetzigen Methode "insert_text" wird der letzte Text jedoch überschrieben... Wie lautet die einfach Möglichkeit, dieses Textfeld a) zu löschen und b) Inhalte einfach hinten anzufügen? Bin noch nicht sehr fit in GTK und die Klasse TextView und deren Funktionen haben mich schlicht erschlagen :(

Code: Alles auswählen

    def __create_textfield(self):
        self.__view = gtk.TextView()
        self.__buffer = self.__view.get_buffer()
        self.__view.set_editable(False)
        self.__view.set_cursor_visible(False)
        scrolled_window = gtk.ScrolledWindow()
        scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scrolled_window.add(self.__view)
        self.insert_text("")
        scrolled_window.show_all()
        return scrolled_window

    def insert_text(self, texts):
        iter0 = self.__buffer.get_start_iter()
        iter1 = self.__buffer.get_end_iter()
        #self.__buffer.delete(iter0,iter1)
        self.__buffer.insert(iter0,texts)
        self.__view.get_focus_chain()
Danke für eure Hilfe!

Gruß, Dussel

EDIT by mawe: code in python tags gesetzt

Verfasst: Mittwoch 17. August 2005, 11:21
von Leonidas
Zurücklehnen:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*- 

import gtk, gobject

class ViewWindows(object):
    def __init__(self):
        self.win = gtk.Window()
        self.win.connect('delete_event', gtk.main_quit)
        
        self.textview = gtk.TextView()
        self.tbuffer = self.textview.get_buffer()
        self.win.add(self.textview)
        gobject.timeout_add(10 * 1000, self.delete_text)
        gobject.timeout_add(1 * 1000, self.append_text)
        
        self.win.show_all()
    
    def append_text(self):
        end = self.tbuffer.get_end_iter()
        self.tbuffer.insert(end, '#')
        return True
    
    def delete_text(self):
        self.tbuffer.set_text('')
        return True

def main():
    vw = ViewWindows()
    gtk.main()

if __name__ == '__main__':
    main()
Also TextView ist ganz einfach zu verwenden, was man von TreeView dagegen nicht mehr behaupten kann :D

dusselmann, du brauchst nicht so viele __ vor deinen Variablen, ohne ist leserlicher und du hast keine Nachteile.

Verfasst: Mittwoch 17. August 2005, 11:45
von dusselmann
Leonidas hat geschrieben:dusselmann, du brauchst nicht so viele __ vor deinen Variablen, ohne ist leserlicher und du hast keine Nachteile.
inwiefern? sollen doch privat sein... :!: :?:

Verfasst: Mittwoch 17. August 2005, 12:11
von Leonidas
dusselmann hat geschrieben:inwiefern? sollen doch privat sein... :!: :?:
Du kannst trotzdem auf sie zugreifen, also sind sie nicht im Java- oder Ruby-Sinne privat. Das ist nur Konvention und das machen die wenigsten Leute, wenn es nervt einfach nur (wenn dann machen sie es für einzelne Variablen und nicht für alle Widgets). Und es ist ja eigentlich auch egal ob die Widgets privat oder publik sind.

Verfasst: Mittwoch 17. August 2005, 12:19
von dusselmann
das ist aber gaaaanz schlecht für eine objektorientierte Programmiersprache!!!

Verfasst: Mittwoch 17. August 2005, 12:57
von Leonidas
dusselmann hat geschrieben:das ist aber gaaaanz schlecht für eine objektorientierte Programmiersprache!!!
Das ist gaaanz schlecht für Java, aber für python ist das toll. Mich ärgert die Versessenheit von Java Programmierern auf private-Objekte Interfaces und Co. Wenn man lange Python Programmiert, stellt man fest dass dies gar nicht nötig ist, weil man auch ohne private-Option wunderbar oder sogar besser abreiten kann, weil man nicht überlegen muss, was man als Private und was als Public deklariert.

Die Objektorientierung von Python hat zwar ein paar Macken (wozu ich den Mangel an private deklaration nicht zähle), jeodch ist sie im großen und ganzen sehr gelungen.

Verfasst: Mittwoch 17. August 2005, 13:00
von dusselmann
Aber das erhöht doch die Unsicherheit für die in den Objekten gespeicherten Daten, oder? Ich find die get- und set-Methodik in Java äußerst gelungen und praktisch..

Verfasst: Mittwoch 17. August 2005, 13:13
von Leonidas
dusselmann hat geschrieben:Aber das erhöht doch die Unsicherheit für die in den Objekten gespeicherten Daten, oder? Ich find die get- und set-Methodik in Java äußerst gelungen und praktisch..
Die get und set-Methodik ist in erster reihe viel Schreibkram, aber sowas gibt es auch in Python: Properties der New-Style-Klassen (sogar recht elegant gelöst, besser zumindest als die getter und setter Methoden in Java).

Die Unsicherheit wird vielleicht erhöht, aber wenn Variablen intern sind, dann ist das dokumentiert, oder eher die Variablen die man nutzen kann sind dokumentiert. Und wenn ich von außen ein Widget ändere, dann brauch ich mich ja auch nicht zu wundern, warum das Programm nicht mehr funktioniert.

Es ist so, dass dem Python Programmierer etwas mehr Verantwortung zufällt, so geht der Python-Interpreter davon aus, dass der durchschnitts Python-Programmierer etwas schlauer ist als der durchschnitts Java-Programmierer, denn schließlich hat der Programmierer ja zu Python überhaupt gefunden :lol: Naja, die meisten Leute mit mehr als ein paar Posts haben ähnlich wie ich zumindest eine leichte Abneigung gegen Java (sei es wegen der Sprache, sei es wegen dem Hype, sei es wegen der Lizenzpolitik).

In Ruby werden die Objektvariablen gekapselt, wenn man sie nicht explizit zum lesen und/oder zum schreiben freigibt. Das finde ich ziemlich unpraktisch, deswegen gebe ich gerne alle frei, da das mit keinen Nachteilen für mich verbunden ist.

Verfasst: Mittwoch 17. August 2005, 14:31
von Joghurt
In Python gibt es die Konvention, interne Variablen mit einem Unterstrich zu versehen, da kann man natürlich immer noch darauf zugreifen, aber der Unterstrich sagt ganz deutlich: "Finger weg"

Python geht davon aus, das der Programmierer weiss, was er tut und verantwortungsvoll programmiert.