ich beschäftige mich seit einem knappen Monat mit Python, bin also noch Anfänger mit etwas Scheu vor Objektorientierung, was sich aber ändern soll.
Mein Programm soll folgendes tun:
Aus einer Textdatei, die mit kommaseparierten Zufallszahlen von 1-6 gefüllt ist, sollen die Zahlen eingelesen werden und dann verschiedenen
Tests unterzogen werden, z.B. soll auf Gleichverteilung geprüft werden, also sind genauso viele 1en wie 2en ... wie 6en vorhanden usw.
Code: Alles auswählen
from Tkinter import *
from ScrolledText import *
import tkFileDialog
import tkMessageBox
def callback():
print "Menuitem geklickt"
def open_command():
file = tkFileDialog.askopenfile(parent=root,mode='rb',title='Select a file')
if file != None:
contents = file.read()
textPad.insert('1.0',contents)
filename = file.name
file.close()
return filename
def save_command(self):
file = tkFileDialog.asksaveasfile(mode='w')
if file != None:
# slice off the last character from get, as an extra return is added
data = self.textPad.get('1.0', END+'-1c')
file.write(data)
file.close()
def exit_command():
if tkMessageBox.askokcancel("Quit", "Do you really want to quit?"):
root.destroy()
def gleichverteilung_command(data_file):
for line in file(data_file):
arr = line.split(',')
max_value = max(arr)
anz = len(arr)
eins = arr.count('1')
zwei = arr.count('2')
drei = arr.count('3')
vier = arr.count('4')
fuenf = arr.count('5')
sechs = arr.count('6')
print max_value
print anz
print eins, zwei, drei, vier, fuenf, sechs
root = Tk()
root.title('Zufallszahlenprogramm')
myMenu = Menu(root)
root.config(menu = myMenu)
textPad = ScrolledText(root, width=100, height=50)
filemenu = Menu(myMenu)
myMenu.add_cascade(label="Datei", menu=filemenu)
filemenu.add_command(label="Neu", command=callback)
filemenu.add_command(label="Laden", command=open_command)
filemenu.add_command(label="Speichern", command=callback)
filemenu.add_separator()
filemenu.add_command(label="Exit!", command=exit_command)
analysismenu = Menu(myMenu)
myMenu.add_cascade(label="Analyse", menu=analysismenu)
analysismenu.add_command(label="Gleichverteilung", command=lambda arg='1.txt': gleichverteilung_command(arg))
textPad.pack()
root.mainloop()
Diese liest die ausgewählte Datei ein und gibt sie mittels textPad.insert im Fenster aus.
Als return-Wert möchte ich gern den Filenamen zurückgeben, denn es soll ja möglich sein, aus dem Analysemenu später noch verschiedene andere Zufallstests aufzurufen, die sich dann auf die anfangs gewählte Datei beziehen.
Jetzt zu meinem Problem. Wie komme ich an den per Return zurückgegeben Filenamen?
filename = filemenu.add_command(label="Laden", command=open_command) funktioniert nicht.
Ist mein Ansatz für dieses Vorhaben überhaupt sinnvoll?
Eine zweite Variante wäre ja, nicht den Filenamen, sondern eine Liste mit den Zufallszahlen aus der open_command()-Funktion zurückzugeben und damit zu arbeiten. Daran bin ich aber im Moment noch gescheitert.
Damit ich die Funktion gleichverteilung_command überhaupt aufrufen kann, habe ich testweise der Lambdafunktion als Argument den Dateinamen mitgegeben, was ja so nicht bleiben kann.
Vielleicht verstehe ich das mit der Lambdafunktion auch noch irgendwann, im Moment ist es mir noch nicht ganz klar, da werde ich noch etwas lesen ...
Die print-Anweisungen in der Funktion gleichverteilung_command dienen im Moment nur Testzwecken, später sollen die Anzahl 1en, 2en usw. grafisch als Balkendiagramm im Fenster ausgegeben werden.
Könnt Ihr mir mal einen Anschubser geben?
Kennt jemand 'ne Seite, mit Code von so ähnlichen Programmen, den ich studieren könnte.
Bis jetzt fand ich nur sehr komplexe Programme, die meinen Verständnishorizont leider noch überstiegen.
Gruß
Frank