Kivy将文件拖到小部件上,而不是窗口上

2024-06-25 23:56:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我认为这个问题很基本,但它让我停了两天。 我想做一个简单的Kivy GUI应用程序。将文件夹拖动到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()

注意:拖放到窗口小部件,而不是窗口。 我做了很多谷歌搜索,研究了很多例子。我找不到代码有什么问题。 互联网上的大多数示例都使用大量的类。但我想要的是窗口、按钮、标签。。。。我试图理解什么是类,什么是init,什么是self,什么是super()。但它们使代码变得抽象。所以我尽可能地避开它们。希望有人能帮助我这个代码有什么问题


Tags: fromimportselfboxnonesizewidgetwindow
1条回答
网友
1楼 · 发布于 2024-06-25 23:56:25
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()

相关问题 更多 >