ScrolledText unveränderlich machen...

Fragen zu Tkinter.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Mittwoch 11. Februar 2009, 21:03

Hallo,

gibt es eine Option für ScrolledText, mit der man einstellen kann, dass der Text innerhalb des Widgets nicht vom Benutzer gelöscht werden kann bzw. neuer Text hereingeschrieben wird, sondern nur explizit Text mit der Methode insert eingefügt wird?

Oder gibt es dafür Alternativen zu ScrolledText`?
mfg

Thomas :-)
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Mittwoch 11. Februar 2009, 21:44

Code: Alles auswählen

my_text_widget.config(state=tk.DISABLED)
sollte es sein.
Mit "tk.NORMAL" wird das Text-Widget wieder editierbar.

:wink:
yipyip
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Mittwoch 11. Februar 2009, 21:57

Ach so, zum Schreiben mit 'insert()' muss das
Widget auf 'state=tk.NORMAL' stehen.
Danach kann man es dann wieder in den Zustand
'tk.DISABLED' setzen.

:wink:
yipyip
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Mittwoch 11. Februar 2009, 22:06

Vielen dank. Genau das hab ich gesucht. :)
mfg

Thomas :-)
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Donnerstag 5. März 2009, 19:27

Hallo,

ich habe noch 2 Fragen zu ScrolledText:

1. Ich füge über eine Funktion, die mit einem Button verknüpft ist, einen Text in das ScrolledText Fenster ein. Zudem habe ich verschiedene Einstellungsmöglichkeiten (Fett, Kursiv, Schriftgröße etc.). Je nachdem welche Funktion ausgewählt wurde, möchte ich font des Fensters ändern. Wenn ich das aber mit config mache, wird der gesammte Text im Fenster verändert. Ich möchte jedoch wie es z.B. bei Word der Fall ist nur den Text fett haben, solange die Option Fett gewählt habe. Text der schon im Fenster steht soll nicht verändert werden.

2. Wenn ich die Schriftgröße größer mache, dann ändert sich auch die Größe des ScrolledText Fensters. Jedoch soll diese immer konstant bleiben. Welche Option ist dafür zu empfehlen?
mfg

Thomas :-)
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Sonntag 8. März 2009, 16:49

Hat denn keiner eine Idee? Ohne eine Lösung des Problems ist die Hälfte der Funktionalität des Programmes nicht gegeben :(
mfg

Thomas :-)
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Sonntag 8. März 2009, 17:10

Ich habe mich auch noch nicht so intensiv
mit den Feinheiten des Text-Widgets beschäftigt,
aber schau Dir mal das Konzept mit den "Tags" in

http://www.pythonware.com/library/tkint ... ethods.htm

und

http://infohost.nmt.edu/tcc/help/pubs/t ... thods.html

an.

Mehr als diese kleine Demo kann ich im Moment auch nicht
dazu sagen:
http://paste.pocoo.org/show/106972/

:wink:
yipyip
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Dienstag 10. März 2009, 22:19

Hallo,

das Konzept mit den Tags ist das was ich suche. Hab ein wenig damit rumgespielt und dabei einige Probleme bezüglich meines Programmes festgestellt:

1. Ein bestimmter Text soll immer in der gleichen Farbe und Schriftgröße
sein. Es könnt fiktiv also ungefähr so aussehen:

Thomas:
Heute Morgen um 3 Uhr.
Klaus:
Ok
Thomas:
Bis dann

Thomas soll immer in rot und Klaus in grün sein. Jetzt gibt es aber folgendes Problem:

self.text.tag_add('Thomas', '1.0', '1.8') die 2 Zahlen geben die Zeile und die Anzahl an Zeichen in der Zeile an, die verändert werden sollen. Aber ich kann nicht wissen in welcher Zeile immer Thomas und Klaus steht, da die Nachrichten auch über mehrere Zeilen gehen können.

2. Ich füge immer einen Text in das Textwidget ein. Jedoch kann es ja sein, dass innerhalb des Textes eine Nachricht normal ist, eine andere Fett.

z.B.

Thomas:
Hallo
HALLO?!
dann halt nicht

Somit müsste ich ja für jede Nachricht einen neuen Tag schaffen. Das ist nicht möglich.
mfg

Thomas :-)
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Mittwoch 11. März 2009, 13:59

Vielleicht hilft Dir ja der Ansatz in dieser Demo weiter:
http://paste.pocoo.org/show/107402/

Gibt man 'thomas' oder 'klaus' ein, so erscheinen diese
Wörter beim nächsten Key-Event in rot bzw. grün,
egal an welcher Stelle sie stehen.
(Gross- und Kleinschreibung werden nicht berücksichtigt.)

Noch ein Link dazu:
http://effbot.org/tkinterbook/text.htm


:wink:
yipyip
Benutzeravatar
wuf
User
Beiträge: 1476
Registriert: Sonntag 8. Juni 2003, 09:50

Mittwoch 11. März 2009, 20:36

.... Hier noch etwas zum herumexperimentieren:

[Code ausgelagert]

Gruss wuf :wink:
Zuletzt geändert von wuf am Donnerstag 12. März 2009, 16:58, insgesamt 1-mal geändert.
Take it easy Mates!
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Mittwoch 11. März 2009, 21:45

Hallo,

vielen dank für eure Beispiele, aber irgendwie bekomm ich es nicht gebacken die tags richtig zu konfigurieren / auf mein Problem anzupassen.

Mit yipps Vorschlag hat es teils geklappt, jedoch ist das Programm oft abgestürzt nachdem ich das 2. mal was in das Textwidget eingefügt hab. Ich poste einfach mal einen wichtigen Ausschnit aus dem Programm und vielleicht könnt ihr ja was draus machen.

http://paste.pocoo.org/show/107477/

Der Username und die IP werden in einem vorhergehenden Fenster eingegeben und in der gewissen Datei cnct.dat abgespeichert. Erstelt einfach die genannte Datei mit localhost und irgendeinen Namen im gegebenen Verzeichnis.

Ich möchte nun, dass der Chatname + das Datum des aktuellen Users in grün ist und des Fremden Users in Rot (allerdings sind die Usernamen die gleichen wenn ihr localhost verwendet)

Wenn die Farbe geändert wird und eine Nachricht über den Sendbutton ins Textfeld eingefügt wird, möchte ich, dass es auch grün erscheint und zwar nur der eingegebene Text zu dem Zeitpunkt als die Farbe grün gewählt wurde.

Ich weiß, dass das alles sehr verwirrend ist (ich blick ja selbst nicht mehr durch :D).
mfg

Thomas :-)
Benutzeravatar
wuf
User
Beiträge: 1476
Registriert: Sonntag 8. Juni 2003, 09:50

Donnerstag 12. März 2009, 00:46

Hallo Python 47

Habe mit deinem Skript für Testzwecke folgendes gemacht:

a) Datei einlesen unterdrückt
b) Socket-Kommunikation unterdrückt
c) Taggenerierung plus Tagkonfigurierung für den Sender eingebaut
d) Tagfarbe wird fest vorgegeben ('red')

Funktioniert jetzt nur für den Sender!

Hier das frisierte Skript:

[Code ausgelagert]

Vielleicht kannst du das Skript auch noch für den Empfänger erweitern. Versuch es einmal.

Gruss wuf :wink:
Zuletzt geändert von wuf am Donnerstag 12. März 2009, 16:50, insgesamt 1-mal geändert.
Take it easy Mates!
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Donnerstag 12. März 2009, 16:02

Du musst doch eigentlich nur die benötigten Tags
zu Beginn mit 'tag_config()' initialisieren und
dann mit 'insert(...,..., passender_tag)' den Text
in das Text-Widget schreiben.

Hier eine gering überarbeitete Version:
http://paste.pocoo.org/show/107573/

(Deine 'cnct.dat' steht bei mir gleichen Verzeichnis wie
das Skript; soll ja Betriebssysteme geben, die
mit 'C:\...' nix anfangen können.)

OOP heisst nicht, dass man einfach 'class...'
obendrüber schreibt.
Ich würde zumindest die Netzwerkfunktionalität
von der Gui trennen.

:wink:
yipyip
Benutzeravatar
wuf
User
Beiträge: 1476
Registriert: Sonntag 8. Juni 2003, 09:50

Donnerstag 12. März 2009, 18:59

Hallo yipyip

Stimmt die erwähnten Sachen waren mir noch nicht bekannt.

a) Ich wusste nicht, dass mit der Methode .tag_config ein noch nicht existierender Tag mit gleichzeitiger Konfiguration erstellt werden kann.

b) Ich wusste nicht dass mit der Methode .insert() ein tag mitgegeben werden kann.

Dies vereinfacht die Lösung wesentlich. Danke für deine lehrreichen Tipps. Ich liebe eben manchmal den komplizierten Weg. :D

Hast du das Skript einmal über die local host IP-Adresse 127.0.0.1 ausprobiert? Tritt bei dir beim senden einer Meldung keine Exception auf?

Gruss wuf :wink:
Take it easy Mates!
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Donnerstag 12. März 2009, 19:31

Hallo wuf,
Zu a)
Ich bis vorgestern auch noch nicht.
Zu b)
Ich bis vorgestern... :D :wink:

Bei mir treten keine Exceptions auf,
weder mit 127.0.0.1
noch mit der mir dynamisch zugeteilten,
aktuellen IP-Adresse.

:wink:
yipyip
Antworten