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
Weiß niemand etwas? :cry: :cry: :cry: :cry: :cry: :cry: :?

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 :lol:

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 :wink:

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 :wink:

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. :lol:

Gruß wuf :wink:

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. :lol:
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 :-D

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?