#! /usr/bin/env python3 import tkinter #from Tkinter import * from tkinter import filedialog from tkinter import messagebox import os import os.path import platform class MyApp(tkinter.Frame): def __init__(self, master=None): tkinter.Frame.__init__(self, master) self.menuBar = tkinter.Menu(self) master.config(menu=self.menuBar) self.filename="" self.pack(expand=True, fill="both") # muss immer sein self.setMenues() self.setGUI() if platform.system()=="Windows": self.nl='\r\n' else: self.nl='\n' master.bind("", self.keyPress) master.bind("", self.keyRelease) def keyPress(self,event): print("Key Press Event:") print(" event.char:", event.char) print(" event.keysym:", event.keysym) print(" event.keycode:", event.keycode) print(" event.keysym_num:", event.keysym_num) def keyRelease(self,event): print("Key Release Event:") print(" event.char:", event.char) print(" event.keysym:", event.keysym) print(" event.keycode:", event.keycode) print(" event.keysym_num:", event.keysym_num) if event.keysym_num==65481: # F12 self.saveasFile() def setGUI(self): buttonframe = tkinter.Frame(self) buttonframe.pack( side="top", padx="5", pady="5", anchor="w") self.bnNewFile = tkinter.Button(buttonframe) self.bnNewFile["text"] = "Neu" self.bnNewFile["command"] = self.newFile self.bnNewFile.pack(padx="5",pady="5", side="left") self.bnOpenFile = tkinter.Button(buttonframe) self.bnOpenFile["text"] = "Öffnen" self.bnOpenFile["command"] = self.openFile self.bnOpenFile.pack(padx="5",pady="5", side="left") self.bnSaveFile = tkinter.Button(buttonframe) self.bnSaveFile["text"] = "Speichern" self.bnSaveFile["command"] = self.saveFile self.bnSaveFile.pack(padx="5",pady="5", side="left") self.bnStartFile = tkinter.Button(buttonframe) self.bnStartFile["text"] = "Start" self.bnStartFile["command"] = self.startFile self.bnStartFile.pack(padx="5",pady="5", side="left") frameEditor = tkinter.Frame(self) frameEditor.pack(expand=True, fill="both", side="top" ) # fill=x,y,both # Reihenfolge ist wichtig scrollbar vs. editor sbx = tkinter.Scrollbar(frameEditor, orient="horizontal") sbx.pack(fill="x", side="bottom") sby = tkinter.Scrollbar(frameEditor) sby.pack(fill="y", side="right") self.editor = tkinter.Text(frameEditor) self.editor.config(wrap="none") # wrap="word" word char self.editor.pack(expand=True, fill="both", padx="5",pady="5") self.editor["xscrollcommand"] = sbx.set sbx["command"] = self.editor.xview self.editor["yscrollcommand"] = sby.set sby["command"] = self.editor.yview self.editor.bind("", self.myselectAllEvent) self.editor.bind("", self.myselectAllEvent) # just in case caps lock is on self.editor.bind("", self.copyClipboardEvent) self.editor.bind("", self.copyClipboardEvent) self.editor.bind("", self.insertFromClipboardEvent) self.editor.bind("", self.insertFromClipboardEvent) self.editor.bind("", self.openFileEvent) self.editor.bind("", self.openFileEvent) self.editor.bind("", self.saveFileEvent) self.editor.bind("", self.saveFileEvent) self.bind("", self.saveasFileEvent) # self.editor.bind("", textChanged) # noch fehlerhaft # Options von text: tabs wrap yscrollcommand def dosunix(self): if platform.system()=="Windows": os.spawnv(os.P_NOWAIT, "c:/windows/system32/cmd.exe",['/K', '']) else: # open default terminal-window (default softlink in /usr/bin/x-terminal-emulator set by user) os.spawnv(os.P_NOWAIT, "/usr/bin/x-terminal-emulator", ( '', "-e" , "python3")) # os.spawnv(os.P_NOWAIT, "/bin/bash",[]) # Alternativ: os.name=="posix" --> unix/linux/andere unixe mit bash --> bash benutzen def setMenues(self): self.menuFile = tkinter.Menu(self.menuBar, tearoff=False) self.menuFile.add_command(label="Öffnen Strg+O", command=self.openFile) self.menuFile.add_command(label="Speichern Strg+S", command=self.saveFile) self.menuFile.add_command(label="Speichern unter F12", command=self.saveasFile) self.menuFile.add_separator() self.menuFile.add_command(label="DOS-Unix-Ebene", command=self.dosunix) self.menuFile.add_separator() self.menuFile.add_command(label="Beenden", command=self.quit) self.menuBar.add_cascade(label="Datei", menu=self.menuFile) self.menuEdit = tkinter.Menu(self.menuBar, tearoff=False) self.menuEdit.add_command(label="Einfügen Strg+V", command=self.insertFromClipboard) self.menuEdit.add_command(label="Kopieren Strg+C", command=self.copyClipboard) self.menuEdit.add_separator() self.menuEdit.add_command(label="Alles markieren Strg+A", command=self.myselectAll) self.menuBar.add_cascade(label="Edit", menu=self.menuEdit) self.menuPython = tkinter.Menu(self.menuBar, tearoff=False) self.menuBar.add_cascade(label="Python", menu=self.menuPython) # -- self.menuLanguage = tkinter.Menu(self.menuBar, tearoff=False) self.menuLanguage.add_command(label="If", command=self.helpIf) self.menuLanguage.add_command(label="IfElse" , command=self.helpIfElse) self.menuLanguage.add_command(label="IfElifElse", command=self.helpIfElifElse) self.menuLanguage.add_command(label="While", command=self.helpWhile) self.menuLanguage.add_command(label="For each" , command=self.helpForEach) self.menuLanguage.add_command(label="For each range" , command=self.helpForEachRange) self.menuPython.add_cascade(label="Sprache", menu=self.menuLanguage) self.menupythonfunctions = tkinter.Menu(self.menuBar, tearoff=False) self.menupythonfunctions.add_command(label="abs", command=self.helpAbs) self.menupythonfunctions.add_command(label="fabs", command=self.helpFabs) self.menupythonfunctions.add_command(label="min", command=self.helpMin) self.menupythonfunctions.add_command(label="max", command=self.helpMax) self.menupythonfunctions.add_command(label="exp", command=self.helpExp) self.menupythonfunctions.add_command(label="log10", command=self.helpLog10) self.menupythonfunctions.add_command(label="log(x[,base])", command=self.helpLogxbase) self.menupythonfunctions.add_command(label="ln", command=self.helpLn) self.menupythonfunctions.add_command(label="sqrt", command=self.helpSqrt) self.menupythonfunctions.add_command(label="floor (abschneiden)", command=self.helpFloor) self.menupythonfunctions.add_command(label="trunc", command=self.helpTrunc) self.menupythonfunctions.add_command(label="round", command=self.helpRound) self.menuPython.add_cascade(label="Python-Funktionen", menu=self.menupythonfunctions) # -- self.menuFunctions = tkinter.Menu(self.menuBar, tearoff=False) self.menuFunctions.add_command(label="void", command=self.helpVoidFunction) self.menuFunctions.add_command(label="int", command=self.helpIntFunction) self.menuFunctions.add_command(label="tuple", command=self.helpTupleFunction) self.menuPython.add_cascade(label="Funktionen", menu=self.menuFunctions) # -- self.menuLDS = tkinter.Menu(self.menuBar, tearoff=False) self.menuLDS.add_command(label="Listen", command=self.helpLists) self.menuLDS.add_command(label="Mengen, set", command=self.helpDictionary) self.menuLDS.add_command(label="tuple", command=self.helpSet) self.menuPython.add_cascade(label="Listen, Dict, Set", menu=self.menuLDS) # -- self.menuException = tkinter.Menu(self.menuBar, tearoff=False) self.menuException.add_command(label="Exception Cast", command=self.helpExceptionCast) self.menuException.add_command(label="Exception, komplette Syntax", command=self.helpExceptionSample) self.menuPython.add_cascade(label="Exception", menu=self.menuException) # -- self.menuClass = tkinter.Menu(self.menuBar, tearoff=False) self.menuClass.add_command(label="einfache Klasse", command=self.helpClass) self.menuClass.add_command(label="Klasse mit setter, getter", command=self.helpClassSetGet) self.menuClass.add_command(label="Zwei Klassen", command=self.help2Class) self.menuPython.add_cascade(label="Klassen", menu=self.menuClass) self.menuPython.add_separator() # -- self.menuInput = tkinter.Menu(self.menuBar, tearoff=False) self.menuInput.add_command(label="Eingabe String", command=self.helpInputString) self.menuInput.add_command(label="Eingabe int", command=self.helpInputInt) self.menuPython.add_cascade(label="Eingabe", menu=self.menuInput) # -- self.menuOS = tkinter.Menu(self.menuBar, tearoff=False) self.menuOS.add_command(label="Import os", command=self.helpOSImportOs) self.menuOS.add_command(label="Import os.path", command=self.helpOSImportOsPath) self.menuOS.add_separator() self.menuOS.add_command(label="Parameter abfragen", command=self.helpOSArgs) self.menuOS.add_separator() self.menuOS.add_command(label="get Current Working Directory", command=self.helpOSGetcwd) self.menuOS.add_command(label="listdir", command=self.helpOSListdir) self.menuOS.add_command(label="isdir", command=self.helpOSIsDir) self.menuOS.add_command(label="isfile", command=self.helpOSIsFile) self.menuPython.add_cascade(label="Betriebssystem", menu=self.menuOS) self.menuPython.add_separator() # -- helpTkLabelframe helpTkLabel helpTkSpinbox helpTkScrollbarVerical helpTkScrollbarHorizontal self.menuUIElements = tkinter.Menu(self.menuBar, tearoff=False) self.menuUIElements.add_command(label="TKinter grober Rahmen", command=self.helpTkRahmen) self.menuUIElements.add_separator() self.menuUIElements.add_command(label="TKinter Frame, ButtonBar", command=self.helpTkFrame) self.menuUIElements.add_command(label="TKinter Labelframe, ButtonBar", command=self.helpTkLabelframe) self.menuUIElements.add_separator() self.menuUIElements.add_command(label="TKinter Labelr", command=self.helpTkLabel) self.menuUIElements.add_command(label="TKinter Textbox, Entry", command=self.helpTkEntry) self.menuUIElements.add_command(label="TKinter Spinbox, Entry", command=self.helpTkSpinbox) self.menuUIElements.add_command(label="TKinter Button", command=self.helpTkButton) self.menuUIElements.add_separator() self.menuUIElements.add_command(label="TKinter Radiobutton", command=self.helpTkRadiobutton) self.menuUIElements.add_command(label="TKinter Checkbutton", command=self.helpTkCheckbutton) self.menuUIElements.add_command(label="TKinter Listbox", command=self.helpTkListbox) self.menuUIElements.add_command(label="TKinter Editor, Text", command=self.helpTkText) self.menuUIElements.add_separator() self.menuUIElements.add_command(label="TKinter Scrollbar, vertikal", command=self.helpTkScrollbarVerical) self.menuUIElements.add_command(label="TKinter Scrollbar, horizontal", command=self.helpTkScrollbarHorizontal) self.menuPython.add_cascade(label="UI Elemente", menu=self.menuUIElements) # -- xxxx self.menuUIEvents = tkinter.Menu(self.menuBar, tearoff=False) self.menuUIEvents.add_command(label="TKinter Entry String Variable", command=self.helpTkStringVar) self.menuUIEvents.add_command(label="TKinter EntryInt Variable", command=self.helpTkIntVar) self.menuUIEvents.add_command(label="TKinter Entry Double Variable", command=self.helpTkDoubleVar) self.menuUIEvents.add_command(label="TKinter Entry Checkbutton Booelan Variable", command=self.helpTkBooleanVar) self.menuUIEvents.add_separator() self.menuUIEvents.add_command(label="TKinter Listbox Insert", command=self.helpTkListboxInsert) self.menuUIEvents.add_command(label="TKinter Listbox Add", command=self.helpTkListboxAdd) self.menuUIEvents.add_command(label="TKinter Listbox Select", command=self.helpTkListboxSelect) self.menuUIEvents.add_command(label="TKinter Listbox Get", command=self.helpTkListboxGet) self.menuUIEvents.add_command(label="TKinter Listbox Delete", command=self.helpTkListboxDelete) self.menuUIEvents.add_separator() self.menuUIEvents.add_command(label="TKinter Text Insert", command=self.helpTkTextInsert) self.menuUIEvents.add_command(label="TKinter Text Delete", command=self.helpTkTextDelete) self.menuPython.add_cascade(label="UI Events, get/set", menu=self.menuUIEvents) # -- xxxx self.menuUIConfig = tkinter.Menu(self.menuBar, tearoff=False) self.menuUIConfig.add_command(label="Foreground", command=self.helpTkForeground) self.menuUIConfig.add_command(label="Background", command=self.helpTkBackground) self.menuUIConfig.add_separator() self.menuUIConfig.add_command(label="anchor", command=self.helpTkAnchor) self.menuUIConfig.add_command(label="justify (Ausrichtung)", command=self.helpTkJustify) self.menuPython.add_cascade(label="UI Config", menu=self.menuUIConfig) self.menuPython.add_separator() # -- self.menuDialog = tkinter.Menu(self.menuBar, tearoff=False) self.menuDialog.add_command(label="TKinter Msg Ok Cancel", command=self.helpTkMsgOkCancel) self.menuDialog.add_command(label="TKinter Msg Yes No", command=self.helpTkMsgYesNo) self.menuDialog.add_command(label="TKinter Msg Yes No Cancel", command=self.helpTkMsgYesNoCancel) self.menuDialog.add_command(label="TKinter Msg Retry Cancel", command=self.helpTkMsgRetryCancel) self.menuDialog.add_command(label="TKinter Msg AskString", command=self.helpTkMsgAskString) self.menuDialog.add_command(label="TKinter Msg AskInt", command=self.helpTkMsgAskInt) self.menuDialog.add_command(label="TKinter Msg AskFloat", command=self.helpTkMsgAskFloat) self.menuDialog.add_command(label="TKinter Msg OpenDialog", command=self.helpTkMsgOpenDialog) self.menuDialog.add_command(label="TKinter Msg SaveDialog", command=self.helpTkMsgSaveDialog) self.menuPython.add_cascade(label="Dialoge", menu=self.menuDialog) self.menuHelp = tkinter.Menu(self.menuBar, tearoff=False) self.menuHelp.add_command(label="Prog Info", command=self.proginfo) self.menuBar.add_cascade(label="Hilfe", menu=self.menuHelp) def helpIf(self): self.insertText("\tif a == 0:"+self.nl) def helpIfElse(self): self.insertText("\tif a == 0:"+self.nl+"\t\tpass"+self.nl+"\telse:"+self.nl+"\t\tpass") def helpIfElifElse(self): self.insertText("\tif a == 0:"+self.nl+"\t\tpass"+self.nl+"\telif b == 0:"+self.nl+"\t\tpass"+self.nl+"\telse:"+self.nl+"\t\tpass") def helpWhile(self): self.insertText("\twhile True:+self.nl+\t\tpass") def helpForEach(self): self.insertText("\tfor i in [1,2,3]:+self.nl+\t\tprint(i)") def helpForEachRange(self): self.insertText("\tfor i in range(1,10,2):"+self.nl+"\t\tprint(i)") def helpAbs(self): self.insertText("\t\tvar1 = abs(-12)"+self.nl) def helpFabs(self): self.insertText("\t\tvar1 = math.fabs(-12.4)"+self.nl) def helpMin(self): self.insertText("\t\tvar1 = min([1,2,3])"+self.nl) def helpMax(self): self.insertText("\t\tvar1 = max([1,2,3])"+self.nl) def helpExp(self): self.insertText("\t\tvar1 = math.exp(1)"+self.nl) def helpLog10(self): self.insertText("\t\tvar1 = math.log10(11)"+self.nl) def helpLogxbase(self): self.insertText("\t\tvar1 = math.log(100,10)\t ==> 2"+self.nl) def helpLn(self): self.insertText("\t\tvar1 = math.log(11)\t ln(11) ==> 2.3978952727983707"+self.nl) def helpSqrt(self): self.insertText("\t\tvar1 = math.sqrt(2)"+self.nl) def helpFloor(self): self.insertText( "\t\tvar1 = math.floor(-12.2)\t => -13"+self.nl+ "\t\tvar1 = math.floor(12.2)\t => 12"+self.nl ) def helpTrunc(self): self.insertText( "\t\tvar1 = math.floor(-12.2)\t => -12"+self.nl+ "\t\tvar1 = math.floor(12.2)\t => 12"+self.nl ) def helpRound(self): self.insertText( "\t\tvar1 = round(12.2)\t => 12"+self.nl+ "\t\tvar1 = round(12.5)\t => 12"+self.nl+ "\t\tvar1 = round(12.6)\t => 13"+self.nl+ "\t\tvar1 = round(12.66,1)\t => 12.7"+self.nl ) def helpVoidFunction(self): self.insertText("def fktname(param1):"+self.nl+"\tprint(param1)") def helpIntFunction(self): self.insertText("def fktname(value):"+self.nl+"tprint(value)"+self.nl+"\treturn value+1") def helpTupleFunction(self): self.insertText("def fktname(value):"+self.nl+"\tprint(param)"+self.nl+"\t# Abfrage: t[0], t[1]"+self.nl+"\treturn (value+1, value+2)") def helpLists(self): self.insertText( "# einfache Liste"+self.nl+ "liste = [1,2,13,13,35,6,7,8,9]"+self.nl+ "print(\"Ausgabe mit foreach:\")"+self.nl+ "for item in liste:"+self.nl+ "\tprint(item)"+self.nl+ "print()"+self.nl+ "print(\"Ausgabe mit for range:\")"+self.nl+ "for i in range(0,len(liste),1):"+self.nl+ "\tprint( liste[i] )"+self.nl+ "Methoden"+self.nl+ "# Anzahl der Elemente in der Liste: len(liste) "+self.nl+ "# Min-Element: min(liste) "+self.nl+ "# Max-Element: max(liste) "+self.nl+ "# Suche 6: liste.count(6) "+self.nl+ "# Position von 13: liste.index(13) "+self.nl+ "# insert: liste.insert(42,1)"+self.nl+ "# liste.reverse()"+self.nl ) def helpDictionary(self): self.insertText( "noten = {27456:1.3 , 27457:3.3 , 27459:2.7 , \"Brücke\":\"Extrakäse\" } "+self.nl+ "for key in noten: "+self.nl+ "\tprint(key) "+self.nl+ "print(\"Ausgabe mit einem Key:\") "+self.nl+ "print( noten[27456] ) "+self.nl+ "for key in noten.keys(): "+self.nl+ "\tprint(key, \" \",noten[key]) "+self.nl+ "print(\"Anzahl der Elemente in der Dictionary\", len(noten) ) "+self.nl ) def helpSet(self): self.insertText( "s = set( (2,3,5,7) ) "+self.nl+ "for item in s: "+self.nl+ "\tprint(item) "+self.nl+self.nl+ "print() "+self.nl+ "s.add(\"Pizza\") "+self.nl+ "s.add(\"Pizza\") "+self.nl+self.nl+ "for item in s: "+self.nl+ "\tprint(item) "+self.nl+self.nl+ "print() "+self.nl+ "print(len(s)) "+self.nl ) def helpExceptionCast(self): self.insertText( "try:"+self.nl+ "\ta = int('abc')"+self.nl+ "except ValueError as e:"+self.nl+ "\tprint(\"fehlerhafte Zahl\")"+self.nl+self.nl+ "\t# IndexError"+self.nl+ "\t# ArithmeticError"+self.nl+ "\t# EOFError"+self.nl+ "\t# IOError"+self.nl+ "\t# AttributeError hat kein Instanz hat kein Attribut"+self.nl+ "\t# MemoryError"+self.nl+ "\t# OverflowError"+self.nl+ "\t# ZeroDivisionError"+self.nl+self.nl+ "# raise ValueError('represents a hidden bug, do not catch this')" ) def helpExceptionSample(self): self.insertText( "try:"+self.nl+ "\ta = int('abc')"+self.nl+ "except ValueError as e1:"+self.nl+ "\tprint(\"fehlerhafte Zahl\")"+self.nl+self.nl+ "except OverflowError as e2:"+self.nl+ "\tprint(\"overflowError\")"+self.nl+self.nl+ "else:"+self.nl+ "\t#ausgefuehrt, wenn keine Exception erzeugt wurde"+self.nl+ "\tpass"+self.nl+ "finally:"+self.nl+ "\t#immer ausgefuehrt"+self.nl+ "\tpass"+self.nl+self.nl+ "# raise ValueError('represents a hidden bug, do not catch this')" ) def helpClass(self): self.insertText("class Punkt:"+self.nl+ "\tdef __init__(self, x, y):"+self.nl+ "\t\tself.x=x"+self.nl+ "\t\tself.y=y"+self.nl+self.nl+ "# main"+self.nl+ "p1 = Punkt(12,3)"+self.nl+ "p1.x=42"+self.nl+ "print(p1.x,p1.y)"+self.nl) def helpClassSetGet(self): self.insertText( "class Punkt:"+self.nl+ "\tdef __init__(self, x):"+self.nl+ "\t\tself._X=x"+self.nl+self.nl+ "\tdef getX(self):"+self.nl+ "\t\t\treturn self._X"+self.nl+self.nl+ "\tdef setX(self,x):"+self.nl+ "\t\tself._X=x"+self.nl+self.nl+ "# main"+self.nl+ "p1 = Punkt(12)"+self.nl+ "p1.setX(42)"+self.nl+ "print(p1.getX())"+self.nl) def help2Class(self): self.insertText( "class Schiff:"+self.nl+ "\tdef __init__(self, name):"+self.nl+self.nl+ "\t\tself._name=name"+self.nl+ "\tdef getName(self):"+self.nl+ "\t\treturn self._name"+self.nl+self.nl+ "\tdef setName(self,name):"+self.nl+ "\t\tself._name=name"+self.nl+self.nl+ "class Frachter(Schiff):"+self.nl+self.nl+ "\tdef __init__(self, name, frachtvolumen):"+self.nl+ "\t\tSchiff.__init__(self, name)"+self.nl+ "\t\tself._frachtvolumen=frachtvolumen"+self.nl+self.nl+ "\tdef getFrachtvolumen(self):"+self.nl+ "\t\treturn self._frachtvolumen"+self.nl+self.nl+ "\tdef setFrachtvolumen(self,frachtvolumen):"+self.nl+ "\t\tself._frachtvolumen=frachtvolumen"+self.nl+self.nl+ "\tdef __str__(self):"+self.nl+ "\t\treturn Schiff.getName(self)+\" \"+str(self.getFrachtvolumen())"+self.nl+self.nl+ "# main"+self.nl+ "s1 = Schiff(\"Titanic\")"+self.nl+ "s1.setName(\"Queen Mary\")"+self.nl+ "print(s1.getName())"+self.nl+ "f1 = Frachter(\"KaesePizza\", 12000)"+self.nl+ "f1.setFrachtvolumen(14000)"+self.nl+ "print(f1)"+self.nl) def helpInputString(self): self.insertText("inp = input(\"Geben Sie bitte keinen Text ein\")"+self.nl+"print(inp)") def helpInputInt(self): self.insertText("zahl = int(input(\"Geben Sie bitte eine Zahl ein\"))"+self.nl+"print(zahl)") def helpOSArgs(self): self.insertText( "import sys"+self.nl+self.nl+ "print(len(sys.argv))"+self.nl+self.nl+ "if len(sys.argv)>0:"+self.nl+ "\t# kompletter Name des Skriptes"+self.nl+ "\tprint(sys.argv[0])"+self.nl+self.nl ) def helpOSImportOs(self): self.insertText("import os"+self.nl) def helpOSImportOsPath(self): self.insertText("import os.path"+self.nl) def helpOSGetcwd(self): self.insertText("\t\tpath = getcdw()"+self.nl) def helpOSListdir(self): self.insertText("\t\titems = os.listdir(path)"+self.nl) def helpOSIsDir(self): self.insertText("\t\tvalue = os.path.isdir(item)"+self.nl) def helpOSIsFile(self): self.insertText("\t\tvalue = os.path.isfile(item)"+self.nl) def helpTkRahmen(self): self.insertText( "import tkinter"+self.nl+self.nl+ "class MyApp(tkinter.Frame):"+self.nl+self.nl+ "\tdef __init__(self, master=None):"+self.nl+ "\t\ttkinter.Frame.__init__(self, master)"+self.nl+ "\t\tself.pack()\t# expand=True, fill=\"both\""+self.nl+ "\t\tself.setGUI()"+self.nl+self.nl+ "\tdef setGUI(self):"+self.nl+ "\t\tself.inputui = tkinter.Entry(self)"+self.nl+ "\t\tself.inputui.pack()"+self.nl+ "\t\tself.bnEsc = tkinter.Button(self)"+self.nl+ "\t\tself.bnEsc[\"text\"] = \"Ende\""+self.nl+ "\t\tself.bnEsc[\"command\"] = self.quit"+self.nl+ "\t\tself.bnEsc.pack(side=\"right\")"+self.nl+self.nl+ "# root = tkinter.Tk()"+self.nl+ "# root.title(\"Mein Fenster\")"+self.nl+ "# root.geometry(\"250x100\")"+self.nl+ "# app = MyApp(root)"+self.nl+ "# app.mainloop()"+self.nl+ "MyApp().mainloop()"+self.nl ) def helpTkLabelframe(self): self.insertText( "\t\tlabelframe = tkinter.LabelFrame(self, text=\"Caption\")"+self.nl+ "\t\tlabelframe.pack(fill=\"both\", expand=\"yes\")"+self.nl ) def helpTkLabel(self): self.insertText( "\t\tself.label1 = tkinter.Label(self)"+self.nl+ "\t\tself.label1[\"text\"] = \"Eingabe\""+self.nl+ "\t\tself.label1.pack()"+self.nl ) def helpTkSpinbox(self): self.insertText( "\t\tself.spinbox = tkinter.Spinbox(inputframe, from_=0, to=10)"+self.nl+ "\t\t# self.spinbox = tkinter.Spinbox(inputframe,values = (\"AI\",\"VW\",\"W\"))"+self.nl+ "\t\tself.spinbox.pack(fill=\"x\",padx=\"5\",pady=\"5\")"+self.nl ) def helpTkScrollbarVerical(self): self.insertText( "\t\tsby = tkinter.Scrollbar(self)"+self.nl+ "\t\tsby.pack(fill=\"y\", side=\"right\")"+self.nl+self.nl+ "\t\t# UI-Element"+self.nl+ "\t\t# self.element[\"yscrollcommand\"] = sbx.set"+self.nl+ "\t\t#sby[\"command\"] = self.element.yview"+self.nl ) def helpTkScrollbarHorizontal(self): self.insertText( "\t\tsbx = tkinter.Scrollbar(self, orient=\"horizontal\")"+self.nl+ "\t\tsbx.pack(fill=\"x\", side=\"bottom\")"+self.nl+self.nl+ "\t\t# UI-Element"+self.nl+ "\t\t# self.element[\"xscrollcommand\"] = sbx.set"+self.nl+ "\t\tsbx[\"command\"] = self.element.xview"+self.nl ) def helpTkEntry(self): self.insertText( "\t\t\tself.inputui = tkinter.Entry(self)"+self.nl+ "\t\t\tself.inputui.pack()"+self.nl ) def helpTkButton(self): self.insertText( "\t\t\tself.bnOk = tkinter.Button(self)"+self.nl+ "\t\t\tself.bnOk[\"text\"] = \"Ok\""+self.nl+ "\t\t\tself.bnOk[\"command\"] = self.quit"+self.nl+ "\t\t\tself.bnOk.pack(side=\"right\")"+self.nl ) def helpTkFrame(self): self.insertText( "\t\t\tbuttonframe = tkinter.Frame(self)"+self.nl+ "\t\t\tbuttonframe.pack( side=\"top\" )"+self.nl ) def helpTkRadiobutton(self): self.insertText( "\t\t\tself.group = tkinter.LabelFrame(self, text=\"Noten\")"+self.nl+ "\t\t\tself.group.pack(fill=\"both\", expand=\"yes\")"+self.nl+ "\t\t\tself.rb1= tkinter.Radiobutton(self.group, text=\"Eins\", value=\"Eins\")"+self.nl+ "\t\t\tself.rb1.pack()"+self.nl+ "\t\t\tself.rb2= tkinter.Radiobutton(self.group, text=\"Zwei\", value=\"Zwei\")"+self.nl+ "\t\t\tself.rb2.pack()"+self.nl+ "\t\t\tself.rbProperty = tkinter.StringVar()"+self.nl+ "\t\t\tself.rbProperty.set(\"Zwei\")"+self.nl+ "\t\t\tself.rb1[\"variable\"] = self.rbProperty"+self.nl+ "\t\t\tself.rb2[\"variable\"] = self.rbProperty"+self.nl ) def helpTkCheckbutton(self): self.insertText( "\t\t\tself.group = tkinter.LabelFrame(self, text=\"Noten\")"+self.nl+ "\t\t\tself.group.pack(fill=\"both\", expand=\"yes\")"+self.nl+ "\t\t\tself.chk1= tkinter.Checkbutton(self)"+self.nl+ "\t\t\tself.chk1[\"text\"] = \"Eins\""+self.nl+ "\t\t\tself.chk1.pack()"+self.nl+ "\t\t\tself.chk2= tkinter.Checkbutton(self)"+self.nl+ "\t\t\tself.chk2[\"text\"] = \"Zwei\""+self.nl+ "\t\t\tself.chk2.pack()"+self.nl+ "\t\t\tself.chkProperty1 = tkinter.BooleanVar()"+self.nl+ "\t\t\tself.chkProperty1.set(True)"+self.nl+ "\t\t\tself.chk1[\"variable\"] = self.chkProperty1"+self.nl+ "\t\t\tself.chkProperty2 = tkinter.BooleanVar()"+self.nl+ "\t\t\tself.chkProperty2.set(False)"+self.nl+ "\t\t\tself.chk2[\"variable\"] = self.chkProperty2"+self.nl ) def helpTkListbox(self): self.insertText( "\t\t\tsb = tkinter.Scrollbar(self)"+self.nl+ "\t\t\tsb.pack(fill=\"y\", side=\"right\")"+self.nl+ "\t\t\tlistbox = tkinter.Listbox(self)"+self.nl+ "\t\t\tlistbox.pack(fill=\"both\", expand=True)"+self.nl+ "\t\t\tlistbox[\"yscrollcommand\"] = sb.set"+self.nl+ "\t\t\tsb[\"command\"] = listbox.yview"+self.nl+ "\t\t\tlistbox.insert(\"end\", \"abc\")"+self.nl ) def helpTkText(self): self.insertText( "\t\t\tself.editor = tkinter.Text(self)"+self.nl+ "\t\t\tself.editor.grid(row=1, column=0, padx=\"5\",pady=\"5\")"+self.nl ) def helpTkStringVar(self): self.insertText( "\t\tself.var_inputfield1 = tkinter.StringVar()"+self.nl+ "\t\tself.var_inputfield1.set(\"abc\")"+self.nl+ "\t\tself.inputui1[\"textvariable\"] = self.var_inputfield1"+self.nl ) def helpTkIntVar(self): self.insertText( "\t\tself.var_inputfield1 = tkinter.IntVar()"+self.nl+ "\t\tself.var_inputfield1.set(12)"+self.nl+ "\t\tself.inputui1[\"textvariable\"] = self.var_inputfield1"+self.nl ) def helpTkDoubleVar(self): self.insertText( "\t\tself.var_inputfield1 = tkinter.DoubleVar()"+self.nl+ "\t\tself.var_inputfield1.set(12.5)"+self.nl+ "\t\tself.inputui1[\"textvariable\"] = self.var_inputfield1"+self.nl ) def helpTkBooleanVar(self): self.insertText( "\t\tself.chkProperty1 = tkinter.BooleanVar()"+self.nl+ "\t\tself.chkProperty1.set(True)\t# self.chkProperty1.get()"+self.nl+ "\t\tself.inputui1[\"textvariable\"] = self.chkProperty1"+self.nl ) def helpTkListboxInsert(self): self.insertText("\t\tself.listbox.insert(0,\"abc\")"+self.nl) def helpTkListboxAdd(self): self.insertText("\t\tself.listbox.insert(\"end\",\"abc\")"+self.nl) def helpTkListboxSelect(self): self.insertText( "\t\tindizes = self.listbox.curselection()\t # tupel, selectmode=extended"+self.nl+ "\t\tindex = indizes[0]"+self.nl ) def helpTkListboxGet(self): self.insertText("\t\titem = self.listbox.get(index)"+self.nl) def helpTkListboxDelete(self): self.insertText("\t\tself.listbox.delete(0,\"end\")"+self.nl) def helpTkTextInsert(self): self.insertText("\t\tself.editor.insert(\"end\",\"abc\")"+self.nl) def helpTkTextDelete(self): self.insertText("\t\tself.editor.delete(0,\"end\")"+self.nl) def helpTkForeground(self): self.insertText("\t\tuiElement.config(fg=\"red\")"+self.nl) def helpTkBackground(self): self.insertText("\t\tuiElement.config(bg=\"yellow\")"+self.nl) def helpTkAnchor(self): self.insertText("\t\tuiElement.config(anchor=\"n\")\t# n, ne, e, se, s, sw, w, wn, center"+self.nl) def helpTkJustify(self): self.insertText("\t\tuiElement.config(justify=\"tkinter.LEFT\")\t# LEFT, RIGHT, or CENTER"+self.nl) def helpTkMsgOkCancel(self): self.insertText( "\t\t\tmessagebox.askokcancel( \"Meldung\", \"Ihre Festplatte wird formatiert\")"+self.nl+ "\t\t\t # icon='question', error, warning, info, question"+self.nl ) def helpTkMsgYesNo(self): self.insertText( "\t\t\tresult = messagebox.askyesno(\"Delete\", \"Are You Sure?\","+self.nl+ "\t\t\t\ticon='question', default='no')"+self.nl+ "\t\t\tif result == True:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Deleted\",\"Deleted\")"+self.nl+ "\t\t\telse:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Not Deleted\",\"Not Deleted\")"+self.nl+ "\t\t\t # icon='question', error, warning, info, question\""+self.nl ) def helpTkMsgYesNoCancel(self): self.insertText( "\t\t\tresult = messagebox.askyesnocancel( \"Beenden\", \"Änderungen speichern?\")"+self.nl+ "\t\t\tif result == True:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Beenden\",\"Save\")"+self.nl+ "\t\t\telif result == False:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Beenden\",\"No Save\")"+self.nl+ "\t\t\telif result == None:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Beenden\",\"No Close\")"+self.nl+ "\t\t\telse:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Beenden\",\"Fehlerhafte Abfrage\")"+self.nl+ "\t\t\t # icon='question', error, warning, info, question"+self.nl+self.nl ) def helpTkMsgRetryCancel(self): self.insertText( "\t\t\tresult = messagebox.askretrycancel( \"Datei öffnen\", \"Fehler beim Öffnen, noch einmal versuchen?\")"+self.nl+ "\t\t\tif result == True:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Datei öffnen\",\"Noch einmal\")"+self.nl+ "\t\t\telse:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Datei öffnen\",\"Ende, kein weiterer Versuch\")"+self.nl+ "\t\t\t\t # messagebox.askokcancel( \"Note\", \"Sie erhalten eine 1,0\", default='yes')"+self.nl ) def helpTkMsgAskString(self): self.insertText( "\t\t\tresult = simpledialog.askstring( \"Hello Python\", \"Hello World\")"+self.nl+ "\t\t\tif result == None:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Eingabe\",\"keine\")"+self.nl+ "\t\t\telse:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Eingabe\",result)"+self.nl ) def helpTkMsgAskInt(self): self.insertText( "\t\t\tresult = simpledialog.askinteger( \"Hello Python\", \"Hello World\", initialvalue=42, minvalue=1, maxvalue=99)"+self.nl+ "\t\t\tif result == None:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Eingabe\",\"keine\")"+self.nl+ "\t\t\telse:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Eingabe\",result)"+self.nl ) def helpTkMsgAskFloat(self): self.insertText( "\t\t\tresult = simpledialog.askfloat( \"Hello Python\", \"Hello World\", initialvalue=42.0, minvalue=1.0, maxvalue=99.9)"+self.nl+ "\t\t\tif result == None:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Eingabe\",\"keine\")"+self.nl+ "\t\t\telse:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Eingabe\",result)"+self.nl ) def helpTkMsgOpenDialog(self): self.insertText( "\t\t\tfilename = filedialog.askopenfilename(title=\"Dateien laden\","+self.nl+ "\t\t\t\t initialdir=\"D:/Daten\", multiple=False,"+self.nl+ "\t\t\t\t filetypes=( (\"Pythondateien\",\".py\" ),(\"Alle Dateien\",\"*.*\" ) ) )"+self.nl+ "\t\t\tif filename:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Eingabe\",filename)"+self.nl+self.nl+ "\t\t\telse:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Auswahl\",\"Abbruch\")"+self.nl ) def helpTkMsgSaveDialog(self): self.insertText( "\t\t\tresult = filedialog.asksaveasfilename(initialfile=\"Beispiel.py\","+self.nl+ "\t\t\t\t title=\"Dateien laden\", "+self.nl+ "\t\t\t\t initialdir=\"D:\\progs\\Python\\UI\\\","+self.nl+ "\t\t\t\t filetypes=( (\"Pythondateien\",\".py\" ),(\"Alle Dateien\",\"*.*\" ) ) )"+self.nl+ "\t\t\tif filename:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Auswahl\",filename)"+self.nl+ "\t\t\telse:"+self.nl+ "\t\t\t\tmessagebox.showinfo(\"Auswahl\",\"Abbruch\")"+self.nl ) def proginfo(self): messagebox.showinfo("Programm-Info","Python-IDE"+self.nl+"Version: 03.07.2016"+self.nl+"Copyright by Dipl. Inf., Dipl. Ing. (FH) Michael Wilhelm") def newFile(self): self.editor.delete(0,"end") self.filename=None def openFileEvent(self, event): self.openFile() def openFile(self): filename = filedialog.askopenfilename(title="Dateien laden", initialdir="D:/P/UI", multiple=False, filetypes=( ("Pythondateien",".py" ),("Alle Dateien","*.*" ) ) ) if filename: self.filename = filename pathname=os.path.split(filename) # trennt path and filename root.title("Python-IDE: "+pathname[1] ) messagebox.showinfo("Auswahl",filename) fobj = open(filename,"r") lines="" for line in fobj: lines=lines+line fobj.close() self.editor.delete(0.0, "end") self.editor.insert("end",lines) else: messagebox.showinfo("Auswahl","Abbruch") def saveFileEvent(self, event): self.saveFile() def saveFile(self): if self.filename: fobj = open(self.filename,"w") fobj.write( self.editor.get(1.0,"end") ) fobj.close() else: self.saveasFile() def saveasFileEvent(self, event): self.saveasFile() def saveasFile(self): filename = filedialog.asksaveasfilename(title="Dateien speichern unter", initialdir="D:/P/UI", filetypes=( ("Pythondateien",".py" ),("Alle Dateien","*.*" ) ) ) if filename: self.filename = filename pathname=os.path.split(filename) # trennt path and filename root.title("Python-IDE: "+pathname[1] ) messagebox.showinfo("Auswahl",filename) def startFile(self): if self.filename: os.system(self.filename) else: messagebox.showinfo("Hinweis","Bitte speichern Sie die Datei") def startFile2(self): if self.filename: if platform.system()=="Windows": os.spawnv(os.P_NOWAIT, self.filename,['', '']) else: # open default terminal-window (default softlink in /usr/bin/x-terminal-emulator set by user) os.spawnv(os.P_NOWAIT, "/usr/bin/x-terminal-emulator", ( '', "-e" , "python3")) # os.spawnv(os.P_NOWAIT, "/bin/bash",[]) # Alternativ: os.name=="posix" --> unix/linux/andere unixe mit bash --> bash benutzen else: messagebox.showinfo("Hinweis","Bitte speichern Sie die Datei") def textChanged(event): print("Text Changed") def insertText(self,text): self.editor.insert("end",self.nl+text) def insertFromClipboardEvent(self,event): self.insertFromClipboard() def insertFromClipboard(self): cliptext = root.clipboard_get() print(cliptext) self.editor.insert("end",cliptext) def copyClipboardEvent(self,event): self.copyClipboard() def copyClipboard(self): try: text = self.editor.selection_get() except TclError: print("Select something") else: self.clipboard_clear() self.clipboard_append(text) def myselectAllEvent(self,event): self.myselectAll() def myselectAll(self): self.editor.tag_add("sel", "1.0", "end") self.editor.mark_set("insert", "1.0") self.editor.see("insert") root = tkinter.Tk() root.title("Python-IDE") root.geometry("550x300") app = MyApp(root) app.mainloop() # tkColorChooser → tkinter.colorchooser # tkFileDialog → tkinter.filedialog # tkCommonDialog → tkinter.commondialog # tkSimpleDialog → tkinter.simpledialog # tkFont → tkinter.font # Tkdnd → tkinter.dnd # ScrolledText → tkinter.scrolledtext # Tix → tkinter.tix # ttk → tkinter.ttk