Ich habe folgende Frage bzw Problem Ich möchte gerne eine Funktion für unterschiedliche Widgets.
Beispiel:
Ich habe 2 Entrys bei beiden öffnet sich per klick ein Filedialog danach möchte Ich die dazugehörige Textvariable setzen.Da der Grundsatz dont repeat yourself im Kopf rumschwiert weiß Ich leider nicht wie Ich das schaffe diese Funktion so zu stricken das sie mit mehreren events gekoppelt werden kann.
Code: Alles auswählen
import configparser
from pathlib import Path
import tkinter as tk
from tkinter import filedialog
def config_datei_laden(default_pfad):
"""
Falls Configdatei vorhanden ist ( je nach dem wo das skript liegt) wird diese ausgelesen
:return: dictonary mit pfaden
"""
if default_pfad.exists():
config = configparser.ConfigParser()
config.read(default_pfad)
pfade_dict = {}
for section in config.sections():
for (key, value) in config.items(section):
pfade_dict[key] = value
return pfade_dict
def gui(config_pfade):
def file_dialog():
ausgewaehlter_ordner = tk.filedialog.askdirectory()
textvariable.set(ausgewaehlter_ordner)
# Hauptfenster
window = tk.Tk()
window.title("Konfigurator")
window.geometry("300x300")
config_frame = tk.Frame()
textvariable = tk.StringVar()
config_label = tk.Label(master=config_frame, text="Pfad zur Konfigurationsdatei:")
if not list(config_pfade.values())[0] == "test":
textvariable.set(str(list(config_pfade.values())[0]))
config_entry = tk.Entry(master=config_frame, text=textvariable)
config_entry.bind("<1>", file_dialog) #<--------------------------------------- hier geht es drum später möchte Ich mehrere solcher pfade eingeben und das dafür nur eine Funktion haben
config_label.grid(row=1, column=1, padx=5, pady=5)
config_entry.grid(row=1, column=2, padx=5, pady=5)
# Frame positionieren
config_frame.pack(fill="both", expand=True)
window.mainloop()
def main():
config_pfaden = config_datei_laden((Path(__file__).parent / "config.ini"))
gui(config_pfaden)
if __name__ == "__main__":
main()
Jemand eine Idee ?