Kivy - перетащите файл на виджет, а не в окно - PullRequest
0 голосов
/ 08 апреля 2020

Я думаю, что этот вопрос очень базовый c, но он останавливает меня на два дня. Я хочу сделать простой Kivy- GUI -App. Перетащите папку в ScrollView, затем ScrollView покажет файлы в папке. Вот где я:

from kivy.app import App
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout

class DropApp(App):
    def build(self):

        box = BoxLayout()
        scrV = ScrollView(width = 300, height = 400, size_hint_x=None, size_hint_y=None)
        box.add_widget(scrV)

        layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
        layout.bind(minimum_height=layout.setter('height'))
        for i in range(100):
            btn = Button(text=str(i), size_hint_y=None, height=40)
            layout.add_widget(btn)
        scrV.add_widget(layout)

        Window.bind(on_dropfile=self.handledrops(widget = scrV))

        return box

    def handledrops(self, widget, filename, *args):
        if widget.collide_point(*Window.mouse_pos):
            print(filename)

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

ПРИМЕЧАНИЕ: перетащите в виджет, а не в окно. Я много гуглил, изучал много примеров. Я не могу найти, что не так с кодом. Большинство примеров на inte rnet используют много классов. Но то, что я хочу, это окно, кнопка, метка .... Я пытаюсь понять, что такое класс, что такое init , что такое self., Что такое super (). Но они делают код абстрактным. Поэтому я избегаю их, насколько это возможно. Надеюсь, кто-нибудь может мне помочь, что не так с этим кодом.

1 Ответ

0 голосов
/ 08 апреля 2020
from kivy.app import App
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout

class DropApp(App):
    def build(self):

        box = BoxLayout()
        self.scrV = ScrollView(width = 300, height = 400, size_hint_x=None, size_hint_y=None)
        box.add_widget(self.scrV)

        layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
        layout.bind(minimum_height=layout.setter('height'))
        for i in range(100):
            btn = Button(text=str(i), size_hint_y=None, height=40)
            layout.add_widget(btn)
        self.scrV.add_widget(layout)

        Window.bind(on_dropfile=self.handledrops)

        return box

    def handledrops(self, window_object, filename):
        if self.scrV.collide_point(*Window.mouse_pos):
            print(filename)

if __name__ == '__main__':
    DropApp().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...