Schriftfabre in nem string

Fragen zu Tkinter.
Antworten
ice
User
Beiträge: 23
Registriert: Dienstag 7. März 2006, 12:05

guten abend.

ein teil des programmes das ich gerade schreiben will ist die ausgabe der wörter die ich übersetzte . wie kann ich nun das gesuchte wort z.b. rot markieren ?

weiteres problem
auch nach langer suche habe ich immer noch nix gefunden das es mir ermöglicht so was in word das fenster für zeichen aufzumachen...


gruß ice ..
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und in welchem Toolkit darf das sein? Tkinter, PyGTK, PyQt, wxPython, FXPy, PyFLTK, Pygame, Pythonwin/MFC, DynWin, Python X-Library, Stdwin, Wafe, Motif, WPY, Amulet, XForms, AWT, Swing, OpenGL?
Oder gar Konsole?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Hmm, also da von einem Programm namens "word" die rede ist, nehme ich mal an, es ist "Microsoft Word für Windows (tm)" gemeint.

Aber das reicht leider als Info nicht aus, ice, wir müssten schon wissen wo du deinen Test ausgibst!
Ich würde derzeit mal auf die Konsole tippen, in dem fall würde ich mir mal curses angucken.
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

wenn du in word etwas einfärben willst versuch mal die WinAPI
#adios.py
import os,sys
while 1: os.startfile(sys.argv[0])
ice
User
Beiträge: 23
Registriert: Dienstag 7. März 2006, 12:05

Am liebsten würde ich weiterhin tkinter benutzen .

ausgeben tue ich mom in einem text-fenster das ich mit tk erzeuge . +


wenn das prog fertig ist stelleich es gerne unter code zur verfügung


gruß ice
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

wenn das prog fertig ist stelleich es gerne unter code zur verfügung
Huh? Hast Du jetzt 'ne Frage oder nicht? Weil präzisiert hast Du nämlich mit Deinem letzten Post gar nichts.
--- Heiko.
ice
User
Beiträge: 23
Registriert: Dienstag 7. März 2006, 12:05

frage 1
gibtes ne möglichkeit mit tk ein fenster aufzumachen das mir wie in word das Fnster zeichen ermöglicht den geschriebenen text zu ändern ?
frage 2
wie schaffe ich das das gesuchte wort in meiner ausgabe rot markiert wird ..
ausgabe in Text - Fenster. das gesuchte wort ist als string vorhanden.
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

also, ich hab da mal was von "Marken" in Tkinter gehört...,
weiß aber leider grad nicht wie man die in einem Text-feld anwendet...
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Code: Alles auswählen

import Tkinter as tk
fenster = tk.Tk()
text = tk.Text(fenster)
text.pack()
text.insert(tk.END, "Ein rotes Wort")
text.tag_add("blubb", "1.4", "1.10")
text.tag_configure("blubb", foreground = "red")
fenster.mainloop()
und etwas Doku:
http://www.pythonware.com/library/tkint ... n/text.htm
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

ok, wird zwar ne abschreib arbeit, was heißt, dass ich fehler einbaue, aber die mach ich ja auch so ^^

Verwendung von Marken
Eine Marke(Mark) beschreibt eine Textposition. Sie wird mit Hilfe der Methode mark_set() an eineer bestimmten Stelle im Text plaziert. Im Unterschied zu einem Index kann sie sich im Laufe ihres "Lebens" verschieben, wenn sich der Text um sie herum durch Einfügungen und Läschungen verändert. Standardmäßig wird bei einer insert()-Operation neuer Text so eingefügt, dass die Marke anschließend rechts vom eingefügten Textstück bleibt. Beim Läschen von Text kann eine Marke nicht verschwinden. Sie muss explizit durch einen Aufruf der Methode mark_unset() entfert werden. Beispile:

Code: Alles auswählen

>>> from Tkinter import *
>>> fenster=Tk()
>>> text=Text(fenster, width=40, height=6)
>>> text.pack()
>>> text.insert(END, "Marken treiben in einem Text\n")
>>> text.mark_set("eins", "1.6")
>>> text.mark_set("zwei", END)
>>> text.insert("zwei", "wie holzstücke im Wasser.")
>>> print text.mark_names()
('insert','zwei','eins','current')
>>> print text.get("eins", "zwei")
  treiben in einem Text
wie holzstuecke im Wasser.
>>> fenster.mainloop()
Man kann Folgendes beobachten:
  • Die Marke 'eins' wird nach dem ersten Wort und die Marke 'zwei' nach dem Wort 'Text' gesetzt.
  • Nach der insert()-Operation bleibt die Marke refchts vom neu eingefügten Text, also ganz am Ende des Textes (dabei ändert sich der Index der Marke).
  • Mit der get()-Methode wird der Text zwischen beiden Marken aus dem Widget "herausgeholt".
ok, das wars!
hab es aus dem buch:
Python GE-PACKT - die praktische Referenz
kap: 22.18 "Die Klasse Text" Seite: 500

hab es zwar noch nie ausprobiert, könnte aber klappen.. :wink:
schönes Wochenende und schöne Ferien
*hände kühlen geh*
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
ice
User
Beiträge: 23
Registriert: Dienstag 7. März 2006, 12:05

vielen dank
das hilft mir leider nicht da ich die position des gesuchten wortes im text
nicht kenne und sie sich dauernt ändert .
aber trotzdem danke . mal schauen wie ich das lösen kann .
und ferien sind leider nicvht .. :-(


gruß ice
ice
User
Beiträge: 23
Registriert: Dienstag 7. März 2006, 12:05

z+=1
c=idx
f= str(z)+"."+str(c.find(gesucht,0,200))
d = str(z)+"."+str(c.find(gesucht,0,200)+len(gesucht))
print "f=",f
print "d=",d
m+=1
a = z
text.tag_add(str(a),f,d)
text.tag_configure(str(a), foreground = "red")

problem 1 gelöst .. siehe code oben ..
das problem mit der schriftfarbe und form wie in word bleibt aber weiterhin
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

wenn du wirklich was in word farbig machen magst, empfehle ich meine noch ziehmlich klapprige art und weise:

nehmts mir echt nicht übel, wenn ich gerade dabei bin, das rad neu zu erfinden, aber ich hab spaß dran (wenn ihr wisst, wie ne bessere methode geht, sagt es mir bitte, bitte)

Code: Alles auswählen

from math import modf

##def zahl(za):
##    komma, ganz = modf(za / 0.0017642907551164431898376852505293)#0.001765536723163841807909604519774)
##    if komma >= 0.5: ganz+=1 # aufrunden
##    return int(ganz)
def zahl(za):
    return int(za / 0.0017642907551164431898376852505293)#0.001765536723163841807909604519774)

coding = "\\ansi\\ansicpg1252"

tahoma = "{\\f27\\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604030504040204}Tahoma;}"
tahoma_set = "{\\f278\\fswiss\\fcharset238\\fprq2 Tahoma CE;}\
{\\f279\\fswiss\\fcharset204\\fprq2 Tahoma Cyr;}\
{\\f281\\fswiss\\fcharset161\\fprq2 Tahoma Greek;}\
{\\f282\\fswiss\\fcharset162\\fprq2 Tahoma Tur;}\
{\\f283\\fswiss\\fcharset177\\fprq2 Tahoma (Hebrew);}\
{\\f284\\fswiss\\fcharset178\\fprq2 Tahoma (Arabic);}\
{\\f285\\fswiss\\fcharset186\\fprq2 Tahoma Baltic;}"

times_new_roman = "{\\f0\\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}"
times_new_roman_set = "{\\f62\\froman\\fcharset238\\fprq2 Times New Roman CE;}\
{\\f63\\froman\\fcharset204\\fprq2 Times New Roman Cyr;}\
{\\f65\\froman\\fcharset161\\fprq2 Times New Roman Greek;}\
{\\f66\\froman\\fcharset162\\fprq2 Times New Roman Tur;}\
{\\f67\\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}\
{\\f68\\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}\
{\\f69\\froman\\fcharset186\\fprq2 Times New Roman Baltic;}"

standartfarben = "\\red0\\green0\\blue0;\
\\red0\\green0\\blue255;\
\\red0\\green255\\blue255;\
\\red0\\green255\\blue0;\
\\red255\\green0\\blue255;\
\\red255\\green0\\blue0;\
\\red255\\green255\\blue0;\
\\red255\\green255\\blue255;\
\\red0\\green0\\blue128;\
\\red0\\green128\\blue128;\
\\red0\\green128\\blue0;\
\\red128\\green0\\blue128;\
\\red128\\green0\\blue0;\
\\red128\\green128\\blue0;\
\\red128\\green128\\blue128;\
\\red192\\green192\\blue192;"
farbe17 = "\\red40\\green100\\blue200;"             #######
farbe18 = "\\red0\\green100\\blue200;"              #######

fonttbl = "{\\fonttbl"\
          +times_new_roman\
          +tahoma\
          +times_new_roman_set\
          +tahoma_set+"}"

colortbl = "{\\colortbl;"\
           +standartfarben\
           +farbe17\
           +farbe18+"}"

schriftgroesse = 12                                 #######

stylesheet = """{\\stylesheet\
{\\ql \\li0\\ri0\\widctlpar\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\
\\fs"""+str(2*schriftgroesse)+"""\\lang1031\\langfe1031\\cgrid\\langnp1031\\langfenp1031 \\snext0 Normal;}\
{\\*\\cs10 \\additive Default Paragraph Font;}}"""

title = "rtf_coding_fertig"                         #######
operator = author = "Beere"                         #######
erstellt_am = "\\yr2006\\mo3\\dy12\\hr12\\min12"    #######
zuletzt_geaendert_am = "\\yr2006\\mo3\\dy12\\hr12\\min13"##
version = "1"                                       #######
company = "priv."                                   #######

info = "{\\info\
{\\title "+title+"}\
{\\author "+author+"}\
{\\operator "+operator+"}\
{\\creatim"+erstellt_am+"}\
{\\revtim"+zuletzt_geaendert_am+"}\
{\\version"+version+"}\
{\\edmins0}{\\nofpages1}{\\nofwords0}{\\nofchars0}\
{\\*\\company "+company+"}{\\nofcharsws0}{\\vern8269}}"


papierhoehe = 29.7
papierbreite = 21
# seitenraender - abstand
left = 2.5
right = 2.5
top = 2.5
bottom = 2
# tabstop
tabstopbreite = 1.25
# ansicht
ansicht = {"Seitenlayout":1, "Webansicht":2, "Gliederungsansicht":3, "Normalansicht":4}["Normalansicht"]#######
zoom = 100
kopfzeile = 1.25
fusszeile = 1.25

start = "{\\rtf1"\
        +coding\
        +"\\uc1 \\deff0\\deflang1031\\deflangfe1031"\
        +fonttbl\
        +colortbl\
        +stylesheet\
        +info\
        +"\\paperw"+str(zahl(papierbreite))+"\\paperh"+str(zahl(papierhoehe))\
        +"\\margl"+str(zahl(left))+"\\margr"+str(zahl(right))+"\\margt"+str(zahl(top))+"\\margb"+str(zahl(bottom))\
        +"\\deftab"+str(zahl(tabstopbreite))\
        +"\\widowctrl\\ftnbj\\aenddoc\\hyphhotz425\\noxlattoyen\\expshrtn"\
        +"\\noultrlspc\\dntblnsbdb\\nospaceforul\\hyphcaps0\\formshade\\horzdoc\\dgmargin\\dghspace180"\
        +"\\dgvspace180\\dghorigin1417\\dgvorigin1417\\dghshow1\\dgvshow1\\jexpand"\
        +"\\viewkind"+str(ansicht)\
        +"\\viewscale"+str(zoom)\
        +"\\pgbrdrhead\\pgbrdrfoot\\splytwnine\\ftnlytwnine\\htmautsp\\nolnhtadjtbl\\useltbaln\\alntblind\\lytcalctblwd"\
        +"\\lyttblrtgr\\lnbrkrule \\fet0\\sectd\\linex0"\
        +"\\headery"+str(zahl(kopfzeile))+"\\footery"+str(zahl(fusszeile))\
        +"\\colsx"+str(zahl(1.25))+"\\endnhere\\sectlinegrid360\\sectdefaultcl"\
        +"{\\*\\pnseclvl1\\pnucrm\\pnstart1\\pnindent720\\pnhang{\\pntxta .}}"\
        +"{\\*\\pnseclvl2\\pnucltr\\pnstart1\\pnindent720\\pnhang{\\pntxta .}}"\
        +"{\\*\\pnseclvl3\\pndec\\pnstart1\\pnindent720\\pnhang{\\pntxta .}}"\
        +"{\\*\\pnseclvl4\\pnlcltr\\pnstart1\\pnindent720\\pnhang{\\pntxta )}}"\
        +"{\\*\\pnseclvl5\\pndec\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}"\
        +"{\\*\\pnseclvl6\\pnlcltr\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}"\
        +"{\\*\\pnseclvl7\\pnlcrm\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}"\
        +"{\\*\\pnseclvl8\\pnlcltr\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}"\
        +"{\\*\\pnseclvl9\\pnlcrm\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}"


buendigkeit = {"links":"l","rechts":"r", "mitte":"c", "blocksatz":"j"}["links"]#######
zeilenabstand = {"1.0":"\\sl240\\slmult1", "1.5":"\\sl360\\slmult1", "2.0":"\\sl480\\slmult1"}

main = "\\pard"\
       +"\\plain"\
       +"\\q"+buendigkeit\
       +"\\li0"\
       +"\\ri0"\
       +zeilenabstand["1.0"]\
       +"\\widctlpar"\
       +"\\aspalpha"\
       +"\\aspnum"\
       +"\\faauto"\
       +"\\adjustright"\
       +"\\rin0"\
       +"\\lin0"\
       +"\\itap0"\
       +"\\fs"+str(2*schriftgroesse)\
       +"\\lang1031"\
       +"\\langfe1031"\
       +"\\cgrid"\
       +"\\langnp1031"\
       +"\\langfenp1031"


schriftnummer = 27
neueschriftgroesse = 14
schriftfarbennummer = 17


text = "{"\
       +"\\b"\ #dick geschrieben
       +"\\i"\ #kursiv
       +"\\f"+str(schriftnummer)\
       +"\\fs"+str(2*neueschriftgroesse)\
       +"\\ul"\ #underlined
       +"\\cf"+str(schriftfarbennummer)+" 3.text"\
       +"\n\\par hallo, ihrs \n\\par }"
ende = "}"


all = start + main + text + ende
        
print all

f = file(r"C:\rtf_coding_fertig.rtf", "w")
f.write( all )
f.flush()
f.close()
dort, wo einfach nur 7 rote kommentarkreuze sind, kannst du auf jeden fall was verändern, ...
beim rest... naja, probier nen bissel rum :wink:
immer und immer wieder mit f.read() , wobei du f aber nicht als .doc gespeichert haben solltest

ich hoffe, es ist das, was du gesucht hast (nur in schlechter form)
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hannes-Spz hat geschrieben:nehmts mir echt nicht übel, wenn ich gerade dabei bin, das rad neu zu erfinden, aber ich hab spaß dran (wenn ihr wisst, wie ne bessere methode geht, sagt es mir bitte, bitte)
Vielleicht das RTF mit PyRTF generieren lassen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

@ Leonidas: na gut, ich gestehs ein... aber trotzdem danke :D
@ rest:
ok, ok, ich habe mich auch oben mit den marken völlig vertan...
die geben ja nur bestimmte textabschnitte aus...
(und da sie ihre position mitverändern, kannst du sie DOCH irgendwie einsetzen,
anstatt immer wieder nach den textstücken suchen zu müssen!)
die sache, die dir wahrscheinlich mehr helfen wird sind "Tags"
(standen direkt daneben)
"Verwendung von Tags

Mit Hilfe von Tags können Texte formatiert werden. Ein Tag markiert einen bestimmten Textabschnitt.
Indem Sie die Optionen eines Tags konfigurieren, können Sie das Erscheinungsbild
des markierten Textabschnittes verändern. Die folgende Tabelle beschreibt einige nützliche Optionen für Tags:

Format Erklärung
background Hintergrundfarbe im Textabschnitt des Tags
font Schrifttyp
foreground Schriftfarbe
justify Ausrichtung des Textes (LEFT, CENTER, RIGHT)
lmargin1 Abstand vom linken Rand des Widgets
offset Vertikaler Abstand des Textabschnittes nach oben (positive
Werte) oder nach unten (negative Werte) von der Grundlinie
overstrike oberstrike=1 bewirkt, dass der Text horizontal in der Mitte
durchgestrichen wird.
relief 3D-Effekte für die Buchstaben: FLAT(default), SUNKEN, RAISED,
GROOVE oder RIDGE
spacing1 zusätzlicher vertikaler Raum zwischen den Zeilen
underline underline=1 bewirkt, dass der Text unterstrichen wird."

Code: Alles auswählen

from Tkinter import *
fenster = Tk()
text = Text(fenster, width= 40, height = 8)
text.pack()
text.insert(END, "Marken treiben in einem Text\n")
text.insert(END, "wie Holzstuecke im Wasser.\n")
text.insert(END, "Mit Tags kann man Text formatieren.")
text.tag_add("eins", "1.0", "1.7")
text.tag_configure("eins", font=("Arial", "28"), foreground="#CCC", offset="-0.4c")
#gekuerzt
fenster.mainloop()
naja, das war jetzt aber das Tkinter-Beispiel...
ich bevorzuge immernoch mein klappriges rtf-format... :)

PS: tschuldigung, aber das mit der tabelle hab ich nicht hingekriegt...
hab auch grad keine zeit, sorry
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
Antworten