Liste in Funktion übergeben

Fragen zu Tkinter.
Antworten
ottto
User
Beiträge: 15
Registriert: Donnerstag 9. Februar 2017, 16:36

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.:D

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
Zuletzt geändert von Anonymous am Freitag 24. Februar 2017, 14:46, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@ottto: Der Schubs geht in Richtung objektorientierter Programmierung.
ottto
User
Beiträge: 15
Registriert: Donnerstag 9. Februar 2017, 16:36

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()
Zuletzt geändert von Anonymous am Montag 27. Februar 2017, 17:02, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

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!
ottto
User
Beiträge: 15
Registriert: Donnerstag 9. Februar 2017, 16:36

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
ottto
User
Beiträge: 15
Registriert: Donnerstag 9. Februar 2017, 16:36

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()










__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
ottto
User
Beiträge: 15
Registriert: Donnerstag 9. Februar 2017, 16:36

habs geändert.
vielen Dank.
Antworten