Seite 1 von 1
Liste in Funktion übergeben
Verfasst: Freitag 24. Februar 2017, 14:43
von ottto
Hallo zusammen,
ich hab ein VerständnisProblem mit der Übergabe einer Liste in eine Funktion.
In einem Fenster befinden sich zwei Button. Mit einem wird eine Liste erstellt. Diese Liste brauche ich aber in der Funktion die vom zweiten Button aufgerufen wird. Wie bekomme ich die Liste übergeben?
Ich stehe hier irgendwie auf der Leitung. Wäre super, wenn Ihr mir einen Schubs geben könntet.
Code: Alles auswählen
from tkinter import *
import os, glob
def but_verz_auslesen_action():
lst_dateien=glob.glob("C:/tmp"+"/*.txt")
print(str(len(lst_dateien)))
def but_lst_verarbeiten_action():
#def but_lst_verarbeiten_action(dat):
for i in lst_dateien:
#for i in dat:
print(i)
master = Tk()
master.title("+++ Fehler +++")
but_verz_auslesen=Button(master, text="Verzeichnis auslesen", command=but_verz_auslesen_action)
but_lst_verarbeiten=Button(master, text="Liste verarbeiten", command=but_lst_verarbeiten_action)
#but_lst_verarbeiten=Button(master, text="Liste verarbeiten", command=but_lst_verarbeiten_action(lst_dateien))
but_verz_auslesen.grid(row=0, column=0)
but_lst_verarbeiten.grid(row=1, column=0)
master.mainloop()
Danke.
Gruß.
ottto
Re: Liste in Funktion übergeben
Verfasst: Freitag 24. Februar 2017, 14:48
von BlackJack
@ottto: Der Schubs geht in Richtung objektorientierter Programmierung.
Re: Liste in Funktion übergeben
Verfasst: Montag 27. Februar 2017, 16:54
von ottto
BlackJack hat geschrieben:@ottto: Der Schubs geht in Richtung objektorientierter Programmierung.
Vielen Dank für den Hinweis.
Ich hab, in den letzten Tagen, versucht mich weiter der OOP zu nähern. Die AnfängerBeispiele von verschiedenen Python-Seiten konnte ich auch nachvollziehen/erweitern usw.. Aber selbst OO zu "denken" ist aus meiner Sicht eine ganz andere Schiene. Das merke ich zumindest an meinem Beispiel. Selbst wenn ich die Funktionalität meines TestFensters in eine Klasse setze, bekomme ich die Liste nicht übergeben. Kannst Du mir einen Tipp geben, um einen Einstieg zu finden?
Danke.
Gruß.
ottto
Code: Alles auswählen
from tkinter import *
import os, glob
class VerzGUI:
def __init__(self, master):
self.master=master
self.lst_dateien=[]
master.title("+++ Fehler +++")
self.but_verz_auslesen=Button(master, text="Verzeichnis auslesen", command=self.but_verz_auslesen_action)
self.but_verz_auslesen.grid(row=0, column=0)
self.but_lst_verarbeiten=Button(master, text="Liste verarbeiten", command=self.but_lst_verarbeiten_action)
self.but_lst_verarbeiten.grid(row=1, column=0)
def but_verz_auslesen_action(self):
lst_dateien=glob.glob("C:/tmp"+"/*.txt")
print(str(len(lst_dateien)))
def but_lst_verarbeiten_action(self):
print(str(len(lst_dateien)))
root=Tk()
mein_gui=VerzGUI(root)
root.mainloop()
Re: Liste in Funktion übergeben
Verfasst: Montag 27. Februar 2017, 16:59
von __deets__
Na, wozu glaubst du denn ist der schnieke self-Parameter als erstes Argument in deinen Callbacks gut? Du hast doch deine Liste schon an "self.lst_dateien" gebunden (ein doofer Name uebrigens, man kodiert den Typen nicht inden Variablennamen). Wie waere es, den im callback mal auch mit self davor zu benutzen? Ich garantiere dir, du wirst vom Ergebnis ueberrascht sein!
Re: Liste in Funktion übergeben
Verfasst: Montag 27. Februar 2017, 17:12
von ottto
sorry, dass ich mich so blöd angestellt hab.
funktioniert. Bringt mich weiter.
Vielen Dank, auch für den Hinweis mit dem Namen.
Gruß.
ottto
Re: Liste in Funktion übergeben
Verfasst: Dienstag 28. Februar 2017, 09:57
von ottto
hier die überarbeitete Version.
Könnt Ihr bitte mal schauen, ob das bezüglich Form, Namen usw. passt?
Ich hätte dieses gern "sauber" bevor ich mich an die Überarbeitung des eigentlichen Programmes mache.
Danke.
Gruß.
ottto
Code: Alles auswählen
# -*- coding: utf-8 -*-
#!/usr/bin/python3
import tkinter as tk
import os, glob
class VerzGUI:
def __init__(self, master):
self.master=master
master.title("+++ Fehler +++")
self.dateien=[]
self.verz_auslesen=tk.Button(master, text="Verzeichnis auslesen", command=self.verz_auslesen_action)
self.verz_auslesen.grid(row=0, column=0)
self.lst_verarbeiten=tk.Button(master, text="Liste verarbeiten", command=self.lst_verarbeiten_action)
self.lst_verarbeiten.grid(row=1, column=0)
def verz_auslesen_action(self):
self.dateien=glob.glob("C:/tmp"+"/*.txt")
print(str(len(self.dateien)))
def lst_verarbeiten_action(self):
for i in self.dateien:
print(i)
print(str(len(self.dateien)))
root=tk.Tk()
mein_gui=VerzGUI(root)
root.mainloop()
Re: Liste in Funktion übergeben
Verfasst: Freitag 3. März 2017, 15:12
von __deets__
Gewoehn dir mal ab, diese unnoetigen Abkuerzungen zu verwenden. VerzeichnisGUI ist nun nicht so viel mehr, und dafuer gleich klarer.
Und du hast immer noch Typnamen in Bezeichnern, statt lst_verarbeiten_action zb verzeichnisse_verarbeiten. Das action wuerde ich mir persoenlich sparen, aber ist jetzt auch kein grosses no-no.
Re: Liste in Funktion übergeben
Verfasst: Sonntag 5. März 2017, 19:31
von ottto
habs geändert.
vielen Dank.