Seite 1 von 1

Pfad als Label abdrucken

Verfasst: Freitag 26. März 2021, 08:41
von TuXX
Hallo,.

ich bin Anfänger im Bereich tkinter. Aktuell versuche ich den Pfad abzudrucken, welche von einem filedialog zurückgegeben wird.

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk
from pathlib import Path
from tkinter.filedialog import askopenfilename

class MainWindow(tk.Tk):
    # Benutzeroberfläche
    def __init__(self):
        tk.Tk.__init__(self)
        self.title("Beispiel")
        self.geometry('600x600')
        self.file_path = None

        tabControl = ttk.Notebook(self)
        tab1 = ttk.Frame(tabControl)
        tabControl.add(tab1, text='Reiter 1')
        tabControl.pack(expand=1, fill='both')

        # Buttons für Tab1
        tk.Button(tab1, text="Öffnen", command=self.select_button1).grid(
            row=0, column=0, padx=15, pady=15
        )
        tk.Label(tab1, textvariable=self.file_path).grid(row=1, column=1, padx=15, pady=15)

    def select_button1(self):
        filename = askopenfilename(
            initialdir=Path.home(),
            title="Open file",
            filetypes=(("txt Dateien", "*.txt"),),
        )
        if filename:
            self.file_path = Path(filename)

def main():
    MainWindow().mainloop()


if __name__ == "__main__":
    main()
Ich habe versucht den Pfad über ein Label mit textvariable zu drucken, was allerdings nicht funktioniert.

Vielen Dank für eure Hilfe!

Re: Pfad als Label abdrucken

Verfasst: Freitag 26. März 2021, 09:00
von __blackjack__
@TuXX: `textvariable` muss ein von `tkinter.Variable` abgeleiteter Typ sein. Also beispielsweise `tkinter.StringVar`. Und man darf das Attribut dann nicht einfach durch ein andere Objekt ersetzen, sondern muss den Wert mit der `set()`-Methode setzen.

Re: Pfad als Label abdrucken

Verfasst: Freitag 26. März 2021, 09:02
von Sirius3
textvariable erwartet eine StringVar-Instanz (oder andere *Var). Und dann mußt Du auch die Variable explizit setzen.

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import askopenfilename

class MainWindow(tk.Tk):
    # Benutzeroberfläche
    def __init__(self):
        tk.Tk.__init__(self)
        self.title("Beispiel")
        self.geometry('600x600')
        self.file_path = tk.StringVar(self)

        tabControl = ttk.Notebook(self)
        tab1 = ttk.Frame(tabControl)
        tabControl.add(tab1, text='Reiter 1')
        tabControl.pack(expand=1, fill='both')

        # Buttons für Tab1
        tk.Button(tab1, text="Öffnen", command=self.select_button1).grid(
            row=0, column=0, padx=15, pady=15
        )
        tk.Label(tab1, textvariable=self.file_path).grid(row=1, column=1, padx=15, pady=15)

    def select_button1(self):
        filename = askopenfilename(
            initialdir=Path.home(),
            title="Open file",
            filetypes=(("txt Dateien", "*.txt"),),
        )
        if filename:
            self.file_path.set(filename)

def main():
    MainWindow().mainloop()


if __name__ == "__main__":
    main()

Re: Pfad als Label abdrucken

Verfasst: Freitag 26. März 2021, 09:43
von TuXX
Ich habe den Code mittlerweile um StringVar() ergänzt,. Das Ergebnis ist aber immer noch das selbe.

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk
from pathlib import Path
from tkinter.filedialog import askopenfilename

class MainWindow(tk.Tk):
    # Benutzeroberfläche
    def __init__(self):
        tk.Tk.__init__(self)
        self.title("Beispiel")
        self.geometry('600x600')
        self.file_path = None
        tabControl = ttk.Notebook(self)
        tab1 = ttk.Frame(tabControl)
        tabControl.add(tab1, text='Reiter 1')
        tabControl.pack(expand=1, fill='both')

        # Buttons für Tab1
        tk.Button(tab1, text="Öffnen", command=self.select_button1).grid(
            row=0, column=0, padx=15, pady=15
        )
        filename = tk.StringVar()
        tk.Label(tab1, textvariable=filename).grid(row=1, column=1, padx=15, pady=15)

    def select_button1(self):
        filename = askopenfilename(
            initialdir=Path.home(),
            title="Open file",
            filetypes=(("txt Dateien", "*.txt"),),
        )
        if filename:
            self.file_path = Path(filename)

def main():
    MainWindow().mainloop()


if __name__ == "__main__":
    main()
Ich habe sowohl filename, als auch self.file_path versucht!

Re: Pfad als Label abdrucken

Verfasst: Freitag 26. März 2021, 10:14
von Sirius3
Und warum nimmst Du nicht meine Musterlösung?