# encoding: utf-8 # vi:si:et:sw=4:sts=4:ts=4 import sys import os try: from gi.repository import Gtk, GObject GObject.threads_init() use_Gtk = True except: from tkinter import Tk, PhotoImage import tkinter.filedialog use_Gtk = False DEBUG = False class GtkUI: def selectFolder(self, data): dialog = Gtk.FileChooserDialog(data.get("title", "Select Folder"), None, Gtk.FileChooserAction.SELECT_FOLDER, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) dialog.set_default_response(Gtk.ResponseType.OK) response = dialog.run() if response == Gtk.ResponseType.OK: filename = dialog.get_filename() if DEBUG: print(filename, 'selected') elif response == Gtk.ResponseType.CANCEL: if DEBUG: print('Closed, no files selected') filename = None dialog.destroy() while Gtk.events_pending(): Gtk.main_iteration() if DEBUG: print("done") return filename def selectFile(self, data): dialog = Gtk.FileChooserDialog(data.get("title", "Select File"), None, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) dialog.set_default_response(Gtk.ResponseType.OK) response = dialog.run() if response == Gtk.ResponseType.OK: filename = dialog.get_filename() if DEBUG: print(filename, 'selected') elif response == Gtk.ResponseType.CANCEL: if DEBUG: print('Closed, no files selected') filename = None dialog.destroy() while Gtk.events_pending(): Gtk.main_iteration() if DEBUG: print("done") return filename class TkUI: def __init__(self): self.root = Tk(className="Open Media Library") png = os.path.join(os.path.dirname(os.path.abspath('__file__')), 'static', 'png', 'oml.png') icon = PhotoImage(file=png) self.root.tk.call('wm', 'iconphoto', self.root._w, icon) self.root.withdraw() # hiding tkinter window if sys.platform == 'darwin': self.root.lift() self.root.call('wm', 'attributes', '.', '-topmost', True) self.root.update() self.root.after_idle(self.root.call, 'wm', 'attributes', '.', '-topmost', False) def selectFolder(self, data): return tkinter.filedialog.askdirectory(parent=self.root, title=data.get("title", "Select Folder")) def selectFile(self, data): return tkinter.filedialog.askopenfilename(parent=self.root, title=data.get("title", "Select File")) if use_Gtk: ui = GtkUI() else: ui = TkUI() if __name__ == '__main__': import sys if len(sys.argv) == 2 and sys.argv[1] == 'folder': print(ui.selectFolder({})) else: print(ui.selectFile({}))