Hallo bmh1980
Hier noch eine von unzähligen Möglichkeiten,
Informationen in ein Textfeld zu schreiben oder
dessen Inhalt abzuändern, in einer Datei abzuspeichern
und bei einem Neustart des Programms wieder automatisch
von der Datei zurück in die Textfelder zurückzulesen.
Das Programm enthält noch keine Filter Funktionen. Auch
die Focus Steuerung ist noch nicht integriert.
Ich verstand deine Frage evt. nicht korrekt. Aber
vielleicht kannst du eine deiner speziellen Funktionen noch
in das Skript integrieren, oder Funktionen aus diesem
Skript in deines exportieren.
Eine Eingabe bzw. Änderung wird nur abgespeichert, wenn
sie mit ENTER bestätigt wurde!
Slogan: PYTHON&TKINTER is a good combination!
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Application : Entryfields
# Version : 1.00
# Autor : wuf
# Datum : 31.01.2004
# Geändert : 31.01.2004
import os
import tkMessageBox
import cPickle
from Tkinter import *
def CreateEntryLabel(parent,labellist):
#~~ Erzeugt Eingabezeichnungen
xpos,ypos = TOP_LEFT
for label in labellist:
lblobj = Label(parent,
text = label,
anchor = E,
padx = 5,
width = 20,
bd = 1,
relief = RAISED,
bg = parent['bg'],
fg = 'white',
)
lblobj.propagate(0)
lblobj.pack()
lblobj.place(x=xpos,y=ypos+2)
ypos += 24 + YGAP
def CreateEntryField(parent,entrydata,entrylist):
#~~ Erzeugt Eingabefeld
xpos,ypos = TOP_LEFT
for data in entrydata:
entryfield = Entry(parent,
width = 15,
)
entryfield.propagate(0)
entryfield.pack()
entryfield.bind("<Return>",lambda e,Object=entryfield:TransferToEntryList(Object))
entryfield.place(x=xpos+160,y=ypos)
ypos += 24 + YGAP
entryfield.insert(0,data)
entrylist.append(entryfield)
# entryfield.insert(0,'Hello')
# entryfield.delete(0,last="end")
# print "data = ",entryfield.get()
def ReadEntryData():
global eingabedaten
#~~ Liest die Eingabedaten aus der Datei ein
try:
#~~ Versucht die Eingabedatendatei
# für das Lesen zu öffnen
file = open(ENTRY_PATH + ENTRY_FILE,"r")
except:
#~~ Habe Probleme mit öffnen der Datei oder
# beim lesen der Eingabedaten!
return(FALSE)
#~~ Überträgt die Eingabedaten von der geöffneten
# Datei in die Liste für Eingabedaten
eingabedaten = cPickle.load(file)
file.close
return(TRUE)
def WriteEntryData():
global eingabedaten
#~~ Lagert die Eingabedaten in die Datei aus
if eingabedaten == None:
#~~ Die Liste für Eingabedaten enthält
# keine Daten
return(FALSE)
try:
#~~ Versucht die Eingabedatendatei
# für das Schreiben zu öffnen
file = open(ENTRY_PATH + ENTRY_FILE,"w")
except:
#~~ Habe Probleme mit öffnen der Datei oder
# beim schreiben der Eingabedaten!
print ENTRY_PATH + ENTRY_FILE
return(FALSE)
cPickle.dump(eingabedaten,file)
file.close
return(TRUE)
def TransferToEntryList(entryfield):
global entryflag
#~~ Setze Eingabeflag
entryflag = TRUE
#~~ Hole Index-Nr für das Eingabeobjekt
index = eingabefelder.index(entryfield)
#~~ Übertrage Eingabe vom Eingabefeld in
# die Eingabedatenliste
eingabedaten[index] = entryfield.get()
def SaveEntry():
global eingabedaten
global entryflag
if WriteEntryData() == FALSE:
label = 'Eingabe Speichern'
text = 'Konnte die Eingabedaten nicht speichern!'
tkMessageBox.showwarning(label,text)
else:
entryflag = FALSE
def ExitEntry():
global entryflag
#~~ Kontrolle ob die Eingabe gändert wurde
if entryflag:
#~~ Dialog: Die Eingabe wurde geändert
msgbox = tkMessageBox.Message(root,
type = tkMessageBox.YESNO,
icon = tkMessageBox.QUESTION,
title = "Eingabe",
message = "Soll die Änderung gespeichert werden?")
antwort = msgbox.show()
if antwort == "yes":
#~~ Die Änderung wird gespeichert
SaveEntry()
#~~ Schliesst und entfernt das Hauptfenster der Anwendung
root.destroy()
sys.exit(0)
#******************************************************************
# ->> Versuchsprogramm für Eingabefelder <<-
#******************************************************************
if __name__ == '__main__':
#~~ Es wird ein Tk-Hauptfenster generiert
root = Tk()
#~~ Vergrössere Fenster auf System Bildschirmgrösse
root.maxsize(root.winfo_screenwidth(),root.winfo_screenheight())
#~~ Eigenschaften für das Hauptfenster
if os.name == 'nt':
ScreenWidth = (root.winfo_screenwidth()-8)
ScreenHeight = (root.winfo_screenheight()-28)
if os.name == 'posix':
ScreenWidth = root.winfo_screenwidth()
ScreenHeight = root.winfo_screenheight()
xpos = 0
ypos = 0
width = ScreenWidth
height = ScreenHeight
root.wm_geometry("%dx%d+%d+%d" % (width,height,xpos,ypos))
root.title("Entrys 31.01.2004-15:00")
root["background"] = "steelblue2"
#~~ Funktion welche beim schliessen des Hauptfensters mit
# der Schaltfläche X in der Titelleiste aufgerufen wird.
root.protocol("WM_DELETE_WINDOW", ExitEntry)
#~~ Schaltfläche für das Speichern der Eingabe
ButtonSave = Button(root,text='Eingabe Beenden',width=20,command=ExitEntry)
ButtonSave.pack(side=BOTTOM,pady=5)
#~~ Schaltfläche für das verlassen der Eingabe
ButtonExit = Button(root,text='Eingabe Speichern',width=20,command=SaveEntry)
ButtonExit.pack(side=BOTTOM,pady=5)
#*********************************************
#* Welches Betriebsystem?
#*********************************************
#~~ Unter welchem Betriebsystem läuft Python?
OsPlatform = os.name
if OsPlatform == 'nt':
#-> Python läuft unter MS-Windows
#~~ Verzeichnisnamen
ENTRY_PATH = "C:\\Entry\\"
#~~ Namen der Datei für die Eingabedaten
ENTRY_FILE = 'Entry.dat'
# me.Spacer = "\\"
if OsPlatform == 'posix':
#-> Python läuft unter Linux
#~~ Verzeichnisnamen
ENTRY_PATH = '/usr/Entry/'
#~~ Namen der Datei für die Eingabedaten
ENTRY_FILE = 'Entry.dat'
# me.Spacer = "/"
#*********************************************
#* Verzeichnis für Eingabedaten erstellen
#*********************************************
#~~ Kontrolliert ob das Verzeichnis für die Eingabedaten
# schon vorhanden ist oder erstellt werden muss.
try:
os.chdir(ENTRY_PATH)
#~~ Das Verzeichnis ist schon vorhanden
except:
#~~ Das Verzeichnis wird neu erstellt
os.makedirs(ENTRY_PATH)
#*********************************************
#* Eingabefelder mit Bezeichnungen erstellen
#*********************************************
#~~ Konstante für die Anzahl der Eingabefelder
NUM_ENTRYS = 13 # Anzahl Eingabefelder
TOP_LEFT = (10,10) # Position der oberen linken Ecke
# des Eingabebereiches
YGAP = 2 # Vertikaler Zwischenraum zwischen den Feldern
entryflag = FALSE # Eingabe Merker
#~~ Deklaration der Liste für Eingabebezeichnungen
eingabebezeichnung = []
#~~ Fülle Liste mit Eingabebezeichnungen
for label in range(NUM_ENTRYS):
eingabebezeichnung.append('Bezeichnung-'+str(label+1)+':')
#~~ Erzeuge Eingabebezeichnungen
CreateEntryLabel(root,eingabebezeichnung)
#~~ Deklaration der Liste für Eingabedaten
eingabedaten = []
#~~ Einlesen der Eingabedaten aus der Datei in die Liste
if ReadEntryData() == FALSE:
#~~ Es gab Probleme beim öffen oder lesen der Datei.
# Fülle die Engabeliste mit Defaultwerten.
for entry in range(NUM_ENTRYS):
eingabedaten.append('Eingabe-'+str(entry+1))
#~~ Deklaration der Liste für Eingabeobjekte
eingabefelder = []
#~~ Erzeuge Eingabefelder
CreateEntryField(root,eingabedaten,eingabefelder)
root.mainloop()
Guss wuf
