Seite 1 von 1

Schriftfabre in nem string

Verfasst: Samstag 8. April 2006, 18:55
von ice
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 ..

Verfasst: Samstag 8. April 2006, 20:07
von Leonidas
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?

Verfasst: Sonntag 9. April 2006, 08:45
von henning
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.

Verfasst: Sonntag 9. April 2006, 09:46
von jAN
wenn du in word etwas einfärben willst versuch mal die WinAPI

Verfasst: Sonntag 9. April 2006, 10:36
von ice
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

Verfasst: Sonntag 9. April 2006, 10:39
von modelnine
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.

Verfasst: Sonntag 9. April 2006, 10:51
von ice
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.

Verfasst: Sonntag 9. April 2006, 14:24
von Hannes-Spz
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...

Verfasst: Sonntag 9. April 2006, 14:56
von Mr_Snede

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

Verfasst: Sonntag 9. April 2006, 16:16
von Hannes-Spz
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*

Verfasst: Sonntag 9. April 2006, 19:33
von ice
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

Verfasst: Sonntag 9. April 2006, 21:22
von ice
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

Verfasst: Montag 10. April 2006, 15:53
von Hannes-Spz
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)

Verfasst: Montag 10. April 2006, 16:07
von Leonidas
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?

Verfasst: Montag 10. April 2006, 16:26
von Hannes-Spz
@ 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