Как использовать файловый браузер Windows по умолчанию в приложении kivy

Я разрабатываю приложение kivy, и для загрузки файлов я хотел бы использовать файловый браузер Windows по умолчанию, а не те, которые предлагает kivy (https://kivy.org/doc/stable/api-kivy.uix.filechooser.html). Вы знаете, возможно ли это вообще? Я ничего не нашел вокруг. Спасибо.

Функции, которые фактически работают с файловым браузером kivy по умолчанию, следующие:

def show_load(self):
    content = LoadDialog(load=self.load_file,cancel=self.dismiss_popup)
    self._popup = Popup(
        title='Load file', content=content, size_hint=(0.9, 0.9)
    )
    self._popup.open()

def load_file(self, path, filename):
    self.filename = filename

    full_path = os.path.join(path, filename[0])

    filename = os.path.basename(full_path)

    app = App.get_running_app()
    self.check_input(full_path)

    self.dismiss_popup()

def check_input(self, filepath):
    '''Auxiliary method for checking user input.
    '''
    data_df = load_dataframe(filepath, self.ftypes, sep=';')

    if not isinstance(data_df, pd.DataFrame) and data_df == -999:
        self.warning_popup(message='File format not accepted')

    elif data_df.empty:
        self.warning_popup(message='Empty file')

    # If everything is OK
    else:
        self.data_df = data_df
        self.filepath = filepath

person J. Roca    schedule 15.05.2019    source источник


Ответы (2)


Вы можете использовать обходной путь, основанный на tkinter, см. мой пример приложения ниже.

import tkinter as tk
from tkinter import filedialog

from kivy.app import App
from kivy.base import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button

Builder.load_string("""
<rootwi>:
    orientation:'vertical'
    PathButton:
        on_press: label.text = self.get_path()
    Label:
        id: label

""")
class PathButton(Button):
    @staticmethod
    def get_path():
        root = tk.Tk()
        root.withdraw()

        return( filedialog.askopenfilename() )

class rootwi(BoxLayout):
    pass


class MyApp(App):
    def build(self):
        return rootwi()

if __name__ == '__main__':
    MyApp().run()
person PalimPalim    schedule 15.05.2019

Вы можете использовать средство выбора файлов из Kivy Plyer. Убедитесь, что вы уже установили Kivy Plyer, используя pip install plyer. Вы можете попробовать приведенный ниже код в консоли Python.

from plyer import filechooser
path = filechooser.open_file(title="Pick a CSV file..", 
                             filters=[("Comma-separated Values", "*.csv")])
print(path)
person Aorstab    schedule 22.03.2020
comment
Ух ты! Благодарю вас. - person Naimur Hasan; 28.01.2021