Seite 1 von 1
[nicht gelöst] - Tkinter - Editor
Verfasst: Montag 10. Oktober 2011, 17:31
von jtschoch
Hi,
Ich habe mir eine Editor geschrieben,
er funktioniert, aber ich möchte so eine save funktion wie bei Notepad.
Also das das Programm, wenn das File noch nicht gespeichert ist,
den Save - Dialog öffnet, und wenn es gespeichert ist soll er den Pfad merken,
und kein Dialog öffnen sondern das in den angegebne Pfad von vorher speichen.
Hier der Code ausschnitt:
Code: Alles auswählen
def savefile():
zahl = []
def funktion(zahl):
print zahl
try:
winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\Editor")
except:
None
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\Editor") as key:
winreg.SetValueEx(key, "option", 0, winreg.REG_SZ, zahl)
funktion(zahl)
save_True = zahl
print zahl
if save_True == []:
savegettext = (text.get(0.0,END))
savegettext = savegettext.encode("iso-8859-1")
savetext = tkFileDialog.asksaveasfile(mode='w', defaultextension=".txt",
filetypes=[("Text",".txt"),
("Python",".py"),
("VBS",".vbs"),
("CMD",".bat"),
("Alle Dateien",".*")])
#savetext1 = str(savetext[0:9])
print savetext
try:
savetext.write(savegettext)
savetext.close()
except:
sbar.set(" Error")
zahl.append("1")
funktion(zahl)
else:
print "mode 2"
Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Mittwoch 12. Oktober 2011, 18:18
von jtschoch
Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Mittwoch 12. Oktober 2011, 19:11
von BlackJack
@jtschoch: Ich weiss das der Quelltext *sehr* schlechte Namen verwendet und IMHO zeigt, dass Du nicht weisst was Du da tust. Es würde letztendlich darauf hinaus laufen, das jemand anders das für Dich programmiert.
Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Donnerstag 13. Oktober 2011, 01:17
von Barabbas
ich denke auch, dass der obige Quelltext nichts zur Sache tut. Letztlich ist es doch so: Wenn du ein neues Dokument öffnet, sollte deine Editor-Klasse (oder was auch immer) irgendwo ein Attribut "filename=None" haben. Wenn es ein bestehendes Dokument ist bzw. bereits gespeichert wurde, hat das Attribut "filename" halt den Wert "/home/user/datei.txt" (oder so).
Ob du jetzt einfach speicherst oder vorher den Dialog anzeigst, lässt sich dann wie folgt formulieren: "if filename ... else ...".
So gesehen ist das Problem echt trivial - oder was möchtest du von uns hören?
Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Donnerstag 13. Oktober 2011, 15:57
von jtschoch
Danke Funktioniert

Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Donnerstag 13. Oktober 2011, 16:25
von jtschoch
Ich habe noch was,
ich will in mein Editor Sonderzeichen einfgen können,
also habe ich ein Fenster mit Sonderzeichen gemacht.
Aber ich möchte nicht jedes Sonderzeichen einzeln definieren.
Ich weiß dass es Irgendwie eine möglichkeit mit lambda gibt.
Code Ausschnitt:
Code: Alles auswählen
def sonderzeichen():
root=tk.Tk()
style = ttk.Style()
style.theme_use('xpnative')
root.title("Sonderzeichen")
root.config(bg = "#E3E2E9")
root.geometry('280x200')
sonderzeichenlist1 = [u"\u2022",u"\u00b7", u"\u00a9", u"\u00ae", u"\u00b6",
u"\u00ad", u"\u00ac", u"\u00b1", u"\u00a4"]
def einfuegen(sonderzeichenlist1):# u"\u00bc"
text.insert('end', sonderzeichenlist1)
labell = Label(root, width = 99)
labell.pack(side = "top")
for text in sonderzeichenlist1:
stichpunkt = Button(root, text = text, width = 2, height = 1, command = lambda : einfuegen(sonderzeichenlist1),
font = ('Arial', 11, 'bold'))
stichpunkt.pack(side = "left", anchor = "n", expand = True)
Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Donnerstag 13. Oktober 2011, 18:43
von Hyperion
Und was genau ist jetzt Deine Frage? :K
Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Freitag 14. Oktober 2011, 13:10
von jtschoch
Na wie ich das machen kann das ich auf den entsprechenden Button klicke und dann das
Sonderzeichen was auf den Button ist an das Text Wiget gegeben wird
Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Freitag 14. Oktober 2011, 18:42
von wuf
Hi jtschoch
Hier etwas zum ausprobieren:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from functools import partial
import tkinter as tk
def sonderzeichen():
def einfuegen(sonderzeichen):
text_plane.insert('end', sonderzeichen)
root=tk.Tk()
root.title("Sonderzeichen")
root.config(bg = "#E3E2E9")
sonderzeichenlist1 = ["\u2022", "\u00b7", "\u00a9", "\u00ae", "\u00b6",
"\u00ad", "\u00ac", "\u00b1", "\u00a4"]
labell = tk.Label(root, text='Mein Editor :-)', width = 80,
font=('Arial', 14, 'bold'))
labell.pack(side = "top")
text_plane = tk.Text(root, bg='white')
text_plane.pack(side='top', pady=5)
button_frame = tk.Frame(root)
button_frame.pack(side='top', expand=True, pady=5,)
for index, text in enumerate(sonderzeichenlist1):
stichpunkt = tk.Button(button_frame, text=text, width=2, height=1,
command=partial(einfuegen, sonderzeichenlist1[index]),
font = ('Arial', 11, 'bold'))
stichpunkt.pack(side="left")
return root
root = sonderzeichen()
root.mainloop()
Gruß wuf

Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Freitag 14. Oktober 2011, 21:28
von jtschoch
danke,
Ich habe es Probiert einzubauen, aber ich bekomme ein Unicode ERROR:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "J:\JT_proj\python\editor\editor3.py", line 312, in einfuegen
text.insert(END, sonderzeichen1)
AttributeError: 'unicode' object has no attribute 'insert'
Code:
Code: Alles auswählen
from functools import partial
def sonderzeichen():
def einfuegen(sonderzeichen1):
print sonderzeichen1
text.insert(END, sonderzeichen1)
root=Tk()
root.title("Sonderzeichen")
root.config(bg = "#E3E2E9")
sonderzeichenlist = [u"\u2022", u"\u00b7", u"\u00a9", u"\u00ae", u"\u00b6",
u"\u00ad", u"\u00ac", u"\u00b1", u"\u00a4"]
button_frame = Frame(root)
button_frame.pack(side='top', expand=True, pady=5,)
for index, text in enumerate(sonderzeichenlist):
stichpunkt = Button(button_frame, text=text, width=2, height=1,
command=partial(einfuegen, sonderzeichenlist[index]),
font = ('Arial', 11, 'bold'))
stichpunkt.pack(side="left")
Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Freitag 14. Oktober 2011, 23:57
von Hyperion
Die Meldung kann ja kaum von dem Schnipsel stammen... Zeile 312 WTF?
Zudem ist sie ja eindeutig: Dein `text` Objekt ist eben ein Unicode-Objekt. Da Du den Snippet von wuf ja an einer vermutlich entscheidenden Stelle gekürzt hast, solltest Du das ja leicht selber fixen können

Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Samstag 15. Oktober 2011, 00:04
von wuf
Hi jtschoch
Aber mein Skript alleine funktioniert auf deiner Maschine?
BEMERKUNG: Du darfst für die Instanz des Text-Widget's nicht den Namen 'text' verwenden da du 'text' in der for-Schleife überschreibst!
In meinem Skript brauchte ich hierfür den Namen 'text_plane'
Gruß wuf

Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Samstag 15. Oktober 2011, 00:13
von Hyperion
wuf hat geschrieben:
In meinem Skript brauchte ich hierfür den Namen 'text_plane'
Ach menno... lass ihn doch auch mal selber was rausbekommen

Re: [noch nicht gelöst] - Tkinter - Editor
Verfasst: Samstag 15. Oktober 2011, 07:14
von jtschoch
Danke, es Funktioniert, darauf habe ich gar nicht so geachtet.
Und das Ist ein Ausschnitt aus dem Code, der eigentliche Code ist länger!
Gruß jtschoch
Re: [gelöst] - Tkinter - Editor
Verfasst: Samstag 15. Oktober 2011, 09:39
von wuf
@jtschoch: Super! Geht doch.
ACHTUNG: Der Codeabschnitt:
Code: Alles auswählen
sonderzeichenlist1 = [u"\u2022", u"\u00b7", u"\u00a9", u"\u00ae", u"\u00b6",
u"\u00ad", u"\u00ac", u"\u00b1", u"\u00a4"]
wirft beim Einsatz von Python3.x einen SyntaxError!
@Hyperion: OK! Unser jtschoch hat immerhin Anstand und bedankt sich für eine Hilfe. Da gibt es in unserem Forum andere Typen die sich auf die französische Art verabschieden. Mein Hilfe-Syndrom kommt vermutlich davon, dass ich meiner Amazone schon 20 Jahre versuche das Sprechen beizubringen.
Gruß wuf

Re: [gelöst] - Tkinter - Editor
Verfasst: Samstag 15. Oktober 2011, 10:40
von Hyperion
wuf hat geschrieben:
@Hyperion: OK! Unser jtschoch hat immerhin Anstand und bedankt sich für eine Hilfe. Da gibt es in unserem Forum andere Typen die sich auf die französische Art verabschieden. Mein Hilfe-Syndrom kommt vermutlich davon, dass ich meiner Amazone schon 20 Jahre versuche das Sprechen beizubringen.
Hehe... das stimmt. Ich wollte ja auch nicht verhindern, dass Du ihm hilft - nur muss er endlich lernen, selber sinnvoll über ein Problem nachzudenken

Und dass er `text` falsch gebunden hatte, hätte er durchaus rausfinden können nach der Hilfestellung.
@Amazone: Um die beneide ich Dich immer, wenn ich Deinen Avatar erblicke

Re: [gelöst] - Tkinter - Editor
Verfasst: Samstag 22. Oktober 2011, 19:02
von jtschoch
Ja, aber das war' s noch nicht!
Ich habe schon lange an diesen Abschnitt rumprobiert,
und die Suche auf den Kopf gestellt, aber ich habe es nicht hinbekommen.
Abschnittscode:
Code: Alles auswählen
def schrift(event):
pos = lb.curselection()
#ausgabe = lb.get(pos)
ausgabe = lbVar.get()
print str(ausgabe)
zeigeschrift.delete(0, 80)
zeigeschrift.insert(0, ausgabe)
text.config(font=(ausgabe, 11))
zeige.config(font = (str(ausgabe), 60, 'bold'))
def schriftschnitt_ausgabe(event):
pos = lb1.curselection()
ausgabe = lb1.get(pos)
print ausgabe
zeigeschnitt.delete(0, 80)
zeigeschnitt.insert(0, ausgabe)
def grosse(event):
pos = lb2.curselection()
ausgabe = lb2.get(pos)
zeigegrad.delete(0, 80)
zeigegrad.insert(0, ausgabe)
text.config(font = (ausgabe))
schriftauswahl = ["Arial", "Arial Black", "Comic Sans MS",
"Courier New", "DejaVu Sans", "DejaVu Sans Condensed",
"DejaVu Sans Light", "DejaVu Sans Mono", "DejaVu Serif",
"DejaVu Serif Condensed", "Estrangelo Edessa",
"Franklin Gothic Medium", "Gautami", "Gentium Basic",
"Gentium Book Basic", "Georgia", "Impact", "Kartika",
"Latha", "Liberation Sans Narrow", "Lucida Console",
"Lucida Sans Unicode", "Mangal", "Marlett",
"Microsoft Sans Serif", "MV Boli", "OpenSymbol",
"Palatino Linotype", "Raavi", "Segoe UI", "Segoe UI Light",
"Shruti", "Sylfaen", "Symbol", "Tahoma", "Times New Roman",
"Trebuchet MS", "Tunga", "Verdana", "Vrinda", "Webdings",
"Wingdings"]
###############################################################
sb = Scrollbar(root)
sb.place(relx=0.334, rely=0.14, relheight=0.34)
lbVar = Tkinter.Variable()
lbVar.set(schriftauswahl)
lb = Tkinter.Listbox(root, listvariable = lbVar, yscrollcommand=sb.set)
lb.place(relx=0.018, rely=0.14 , relwidth=0.317 , relheight=0.34)
print lbVar
lbVar.set(schriftauswahl)
sb.config(command=lb.yview)
lb.insert("end", *schriftauswahl)
lb.selection_set(0)
lb.bind("<<ListboxSelect>>", schrift)
###############################################################
schriftschnitt = ["Standard", "Kursiv", "Fett", "Fett Kursiv"]
lb1 = Tkinter.Listbox(root)
lb1Var = Tkinter.StringVar()
lb1.place(relx=0.385, rely=0.14 , relwidth=0.26 , relheight=0.34)
lb1.insert("end", *schriftschnitt)
lb1.selection_set(0)
lb1.bind("<<ListboxSelect>>", schriftschnitt_ausgabe)
################################################################
sb2 = Tkinter.Scrollbar(root)
sb2.place(relx=0.76, rely=0.14, relheight=0.34)
lb2 = Tkinter.Listbox(root, yscrollcommand=sb2.set)
lb2Var = Tkinter.StringVar()
lb2.place(relx=0.66, rely=0.14 , relwidth=0.10 , relheight=0.34)
sb2.config(command=lb2.yview)
lb2.insert("end", *[i for i in range(72)])
lb2.selection_set(0)
lb2.bind("<<ListboxSelect>>", grosse)
################################################################
Ich möchte die Schriftart einstellen und das ist das Problem.
Ich will die es so haben z.B. font = ("Arial", 11, bold) dazu muss ich die
werte immer wieder abrufen, und das funktioniert nicht!
Re: [nicht gelöst] - Tkinter - Editor
Verfasst: Donnerstag 27. Oktober 2011, 14:32
von jtschoch
Keiner ne Idee?