Kivy:事件定义变量的问题

时间:2018-02-11 20:15:46

标签: python kivy

我是 kivy (以及python编程中面向对象的方法)的完整菜鸟,我努力实现一个简单的文件检查器(我想我错过了kivy的关键元素'的逻辑)。我希望我的应用指示我的文件是否为csv

class CsvLoader(BoxLayout):
    def __init__(self, **kwargs):
        super(CsvLoader, self).__init__(**kwargs)

        self.btn = Button(text='Please, Drag and Drop your CSV')
        self.add_widget(self.btn)

        csv = Window.bind(on_dropfile=self._on_file_drop) # this is the s*** part: how to get the file_path?

        if str(csv).split('.')[-1] != "csv'" and csv != None:
            self.clear_widgets()
            btn_error = Button(text='Wrong file type')
            self.add_widget(btn_error)


    def _on_file_drop(self, window, file_path):
        return file_path


class VisualizeMyCsv(App):
    def build(self):
        return CsvLoader()

if __name__ == '__main__':
    VisualizeMyCsv().run()

我错过了什么?感谢

1 个答案:

答案 0 :(得分:0)

使用函数绑定链接一个操作,在您的情况下on_dropfile在您放置文件时触发,该操作具有在触发事件时调用的函数,因此逻辑必须在该方法中完成:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.core.window import Window

class CsvLoader(BoxLayout):
    def __init__(self, **kwargs):
        super(CsvLoader, self).__init__(**kwargs)

        self.btn = Button(text='Please, Drag and Drop your CSV')
        self.add_widget(self.btn)

        Window.bind(on_dropfile=self._on_file_drop)

    def _on_file_drop(self, window, file_path):
        if str(file_path).split('.')[-1] == "csv'":
            print(file_path)
            # here you must indicate that it is a .csv file
        else:
            # it is not a .csv file
            print("it is not a .csv file")

class VisualizeMyCsv(App):
    def build(self):
        return CsvLoader()

if __name__ == '__main__':
    VisualizeMyCsv().run()