Pfad als Label abdrucken

Fragen zu Tkinter.
Antworten
TuXX
User
Beiträge: 24
Registriert: Sonntag 25. Juni 2017, 17:52

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!
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

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()
TuXX
User
Beiträge: 24
Registriert: Sonntag 25. Juni 2017, 17:52

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!
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Und warum nimmst Du nicht meine Musterlösung?
Antworten