BlackJack kam mir zuvor. Nichts desto trotz möchte ich meinen Senf auch abgeben (auch wenn dieser so ziemlich dem von BlackJack entspricht):
Code: Alles auswählen
# -*- coding: utf-8 -*-
## Die Angabe DIESER Kodierung ist nicht notwendig. Python3 verwendet UTF-8 als
## Standardeinstellung. Allerdings sollte man sichergehen, dass die Datei auch
## UTF-8 kodiert ist.
## Die erste Zeile sollte das sogenannte Shebang sein. Dieses wird unter Windows
## normalerweise ignoriert, unixoide Systeme wählen den Interpreter jedoch
## danach aus.
import tkinter
from tkinter.filedialog import askopenfilename
## Per Konvention wird mit 4 Leerzeichen eingerückt.
class MyApp(tkinter.Frame):
def __init__(self, master=None):
tkinter.Frame.__init__(self, master)
## Es gibt die super()-Funktion zum Initialiserungsaufruf der Eltern-
## klasse
self.grid()
## Ein Widget (hier Frame) sollte sich nicht selbst layouten. Dies
## sollte immer das übergeordnete Widget übernehmen.
self.createWidgets()
## Die Aufteilung ist in diesem Minimalbeispiel nicht notwendig kann
## aber in komplexeren Widgets durchaus sinnvoll sein.
def createWidgets(self): ## s. o.
## Per Konvention sollten Funktions- und Methodennamen
## lower_case_with_underscores formatiert werden.
self.button = tkinter.Button(root)
## Es ist nicht nötig, den erzeugten Button an das Widget-Objekt zu
## binden. Das dem Button übergeordnete Widget "kennt" seine Kinder.
self.button["text"] = "Array Inhalt w�hlen"
self.button["command"] = self.arrayerstellen
## Die beiden Zeilen kannst Du in das Erzeugen des Buttons integrieren.
self.button.grid(row=0,column=1)
## Parameter sollten durch Komma+Leerzeichen getrennt werden.
def arrayerstellen(self):
## Die Funktion tut genau das, was ihr Name suggeriert. Es ist nur nicht
## das, was du willst, dass sie tut. Auch hier sollte der Name nach
## Konvention mit einem underscore versehen werden.
global mein_array
## Vergiss, dass es "global" überhaupt gibt. Vergiss es. Nicht da. Nein.
mein_array = []
mein_array.append(askopenfilename())
## Du erzeugst eine leere Liste (ein array ist im Python-Kontext etwas
## anderes), hängst eine Pfad an und verwirfst diese. Darüber hinaus
## ist ``mein_array`` absolut nichts sagend. Interessant ist zu wissen
## WAS man hinter dem Namen erwarten kann: Dateinamen.
def arraynutzen(self):
## Namenskonvention
i = 0
while i < (len(mein_array)-1):
i=i+1
print(mein_array[i])
## Ein klassisches Anti-Pattern. Wenn Du die Elemente einer Liste nutzen
## möchtest, dann verwende die for-Schleife.
root = tkinter.Tk()
root.title("wasauchimmer")
app = MyApp(root)
app.mainloop()
## Code auf Modulebene solltest Du immer vermeiden. Verwende statt dessen das
## s. g. Main-Idiom.
Auf die Gefahr hin, Deinen Lernerfolg zu mindern, ein Umsetzungsvorschlag, um Dich in die richtige Richtung zu schubsen:
Code: Alles auswählen
#!/usr/bin/env python3
import tkinter as tk
from tkinter.filedialog import askopenfilename
class MyFrame(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.filenames = []
# In dieser Liste (welche an das Widget gebunden wird) werden die
# Dateinamen gespeichert.
tk.Button(self, text='Datei wählen', command=self.ask_filename).pack()
tk.Button(self, text='Verwenden', command=self.use_filenames).pack()
def ask_filename(self):
## Die Methode sollte besser 'add_filename' genannt werden, wie in
## einem Folgebetrag erwähnt wird.
self.filenames.append(askopenfilename())
def use_filenames(self):
for e in self.filenames:
print(e)
def main():
root = tk.Tk()
frame = MyFrame(root)
frame.pack()
root.mainloop()
if __name__ == '__main__':
main()
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"