Seite 1 von 1

Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 18:16
von Segelbär
Hallo Zusammen,

Habe aus einem Lehrbuch folgendes Script genommen und um einen Aufruf von filedialog.askdirectory erweitert.
Wenn der filedialog.askdirectory aaskommentiert ist kann man mit dem Button "w öffnen" ein Fenster öffnen und mit "w beenden" wieder schließen. Wenn filedialog.askdirectory mit eingebunden ist, öffnet kein Fenster. "Beenden" geht normal.

Folgende Fehlermeldung kommt immer:
objc[83946]: Class FIFinderSyncExtensionHost is implemented in both /System/Library/PrivateFrameworks/FinderKit.framework/Versions/A/FinderK
it (0x7fff86ac1cd0) and /System/Library/PrivateFrameworks/FileProvider.framework/OverrideBundles/FinderSyncCollaborationFileProviderOverride
.bundle/Contents/MacOS/FinderSyncCollaborationFileProviderOverride (0x110e0ecd8). One of the two will be used. Which one is undefined.


Habe probiert filedialog.askdirectory in der Class zu packen, in eine eigene Funktion zu legen und direkt vor Mainloop zu legen. Kein Unterschied.
Woran liegt das?

Code: (OSX 13)

Code: Alles auswählen

#!/usr/bin/python3
import tkinter as tk
#import tkinter as *
#import os
from tkinter import filedialog

def ask_directory():
    try:
        fdname = filedialog.askdirectory()
        print(fdname)
    except:
        pass
#        with os.scandir(self.fdname) as it:
#            for entry in it:
#                if not entry.name.startswith('.') and entry.is_file():
#                    print(entry.name)

class Mainwindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('root Fenster')
        self.window = None
        tk.Label(self, text="--> root <--").pack()
        tk.Button(self, text='Beenden', command=self.destroy).pack()
        tk.Button(self, text='w öffnen', command=self.open_window).pack()
        tk.Button(self, text='w beenden', command=self.close_window).pack()
        #print(os.fspath(os.getcwd()))
        #print(os.getcwd())
        #fdname = tk.StringVar()


    def close_window(self):
        self.window.destroy()

    def open_window(self):
        self.window = tk.Toplevel(self)
        tk.Label(self.window, text="--> w <--").pack()

def open_root():
    root = Mainwindow()
#    ask_directory()
    fdname = filedialog.askdirectory()
#    print(fdname)
    root.mainloop()

if __name__ == '__main__':
    open_root()

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 18:29
von __deets__
Das hat nichts mit deinem Code zu tun, sondern mit einem Laufzeitproblem in objective C. Zwei Frameworks definieren das gleich Symbol. Das sieht seltsam aus. Woher kommt das Python?

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 18:49
von tom.somebody
Ich glaube so, wie du es gemacht hast funktioniert das nicht.
So wie ich den Code verstehe, blockierst du mit dem Befehl: fdname = filedialog.askdirectory() dein Hauptfenster. Erst wenn du den Dialog schließt, sollten alle Buttons und das Hauptfenster wieder funktionieren.
Ich hätte in der Klasse: Mainwindow einen weiteren Button erstellt, welcher beim Klick eine Methode ausführt, in der du die Zeile fdname = filedialog.askdirectory() stehen hast. Ich lerne leider auch erst seit paar Wochen Python, also kann das auch Blödsinn sein. Aber so hätte ich das wohl gemacht.

Grad getestet...läuft:

Code: Alles auswählen

#!/usr/bin/python3
import tkinter as tk
#import tkinter as *
#import os
from tkinter import filedialog

class Mainwindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('root Fenster')
        self.window = None
        tk.Label(self, text="--> root <--").pack()
        tk.Button(self, text='Beenden', command=self.destroy).pack()
        tk.Button(self, text='w öffnen', command=self.open_window).pack()
        tk.Button(self, text='w beenden', command=self.close_window).pack()
        tk.Button(self, text='dialog öffnen', command=self.open_dialog).pack()
        #print(os.fspath(os.getcwd()))
        #print(os.getcwd())
        #fdname = tk.StringVar()

    def open_dialog(self):
        self.fdname = filedialog.askdirectory()
        print(self.fdname)

    def close_window(self):
        self.window.destroy()

    def open_window(self):
        self.window = tk.Toplevel(self)
        tk.Label(self.window, text="--> w <--").pack()

def open_root():
    root = Mainwindow()
    root.mainloop()

if __name__ == '__main__':
    open_root()

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 19:23
von Segelbär
Hallo __deets__,

ja ist Python. Wie kann ich das abstellen?

Hallo tom.somebody,

ich hatte verschiedenen Varianten probiert, die Button funktionieren nur nachdem das askfilename Fenster zu ist. Danach öffnen sich aber die Fenster durch den Button nicht. Wenn askfilename nicht vorkommt, geht das.

Gruß
Sven

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 19:27
von Segelbär
Danke tom.somebody,,

auch getestet, Läuft.

Leider gibt es noch immer die Fehlermeldung. Jemand eine Idee wie mann das abstellen kann?

Gruß
Sven

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 19:42
von tom.somebody
Leider gibt es noch immer die Fehlermeldung. Jemand eine Idee wie mann das abstellen kann?
Nimm ein Windows! :)

Wenn ich mir deine Fehlermeldung durchlese, würde ich sagen, dass ist ein Mac-Problem. Eine Klasse ist in deinem Mac in zwei Modulen enthalten...und die Fehlermeldung wird eher eine Warning-Meldung sein, die mMn ignoriert werden kann.

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 19:46
von __deets__
Ich habe nicht gefragt, *ob* du Python benutzt. Sondern woher das kommt. Und hast du dein System mit dem OS so bekommen, oder hast du das aktualisiert?

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 20:02
von Segelbär
Hallo __deets__,

habe OSX 10.13.6 MacOsX ist aktuell. Python 3.8.1 Habe das Python von Python.org im Dezember runter geladen ohne OS oder tkinter zu aktualisieren.

Gruß
Sven

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 20:12
von Sirius3
Scheint ja ein allgemeines Problem zu sein: https://stackoverflow.com/questions/469 ... n-xcode-si

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 20:13
von Segelbär
Den Code habe ich aus Python -the Bible (von einem Link zu seinem Beispiel Code) und dann verändert um damit zu experimentieren.

Gruß
Sven

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 20:13
von __deets__
Wenn man danach sucht, findet man https://stackoverflow.com/questions/469 ... n-xcode-si - wie Sirius3 das auch gerade gefunden hat. Und daran kannst du nichts machen, es ist auch nicht die Schuld von Python selbst. Sondern eine Inkonsistenz in Apples Bibliotheken. Musst du leider mit leben.

Re: Nicht-Funktion wenn tkinter.filedialog verwendet wird

Verfasst: Montag 6. Januar 2020, 20:17
von Segelbär
OK, danke dir __deets__, dann wird es hoffentlich ein Update fixen.

Gruß
Sven