Kivy Filechooser 在滚动屏幕上重叠文本

2022-01-15 00:00:00 python kivy kivy-language

问题描述

  • Python:3.7
  • 操作系统:Windows 10
  • 基维:1.11.1
  • Kivy安装方式:pip

FileChooser 在滚动文件列表时会重叠文本.看起来第一个内容保持不变,滚动数据的内容显示在第一个内容的顶部.

FileChooser overlaps text on scrolling through files list. Looks like the 1st content stays and on scroll the content of scrolled data is getting displayed on top of 1st content.


from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty, BoundedNumericProperty, StringProperty
from kivy.lang import Builder

class FirstWindow(Screen):
    def show_load(self):
        content = LoadDialog(load=self.load, cancel=self.dismiss_popup)
        self._popup = Popup(title="Load file", content=content,
                            size_hint=(0.9, 0.9))
        self._popup.open()

    def dismiss_popup(self):
        self._popup.dismiss()

    def cancel(self):
        pass

    def load(path, selection):
        print(path, selection)

class LoadDialog(FloatLayout):
    load = ObjectProperty(None)
    cancel = ObjectProperty(None)

class EditorApp(App):
    def build(self):
        kv = Builder.load_file("editor.kv")
        self.screen_manager = ScreenManager()

        screen = FirstWindow(name="first")
        self.screen_manager.add_widget(screen)
        self.screen_manager.current = "first"

        return self.screen_manager

if __name__ == "__main__":
    editor_app = EditorApp()
    editor_app.run()

KV 文件

<FirstWindow>:
  BoxLayout:
    orientation: "vertical"
    Button:
      text: "Select Folder"
      on_release: root.show_load()

<LoadDialog>:
  BoxLayout:
    size: root.size
    pos: root.pos
    orientation: "vertical"
    FileChooserListView:
      id: filechooser

    BoxLayout:
      size_hint_y: None
      height: 30
      Button:
        text: "Cancel"
        on_release: root.cancel()

      Button:
        text: "Load"
        on_release: root.load(filechooser.path, filechooser.selection)

截图


解决方案

对于面临同样问题的人,我通过将 FileChooser 替换为 Plyer 的原生文件选择器来解决.Github 上的讨论可以在这里找到

For people who are facing the same issue, I resolved by replacing FileChooser with Plyer's native filechooser. Disussion on Github can be found here

相关文章