首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kivy FileChooser重叠

Kivy FileChooser重叠
EN

Stack Overflow用户
提问于 2021-04-21 18:42:10
回答 1查看 292关注 0票数 0

我正在使用来自kivy的FileChooserListView,并且遇到了另一个用户也遇到过的滚动体上与屏幕重叠的文本。我翻阅了他们的在GitHub上发布,读到有些人正在使用普莱尔FileChooser。我还看到有人提到它与.kv文件的构建函数有关。我创建了一个新的kivy应用程序,这个问题没有发生,但是当我回到我以前的应用程序(没有任何变化)时,问题仍然发生。

很抱歉,很长的帖子,但我不知道这两个奇维应用程序代码是如何不同的。我是不是叫了两次导致FileChooser“保持”它的位置的东西?我并不反对使用plyer的FileChooser,但是有人能给我一个如何实现它的例子吗?

testing_kivy.py

代码语言:javascript
复制
from kivy.app import App
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
import os


def train_load(path, filename):
    download_path = os.path.join(path, filename[0])
    print(download_path)


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


class TrainingWindow(Screen):
    def show_load_list(self):
        content = LoadDialog(load=train_load, cancel=self.dismiss_popup)
        self._popup = Popup(title="Load a file list", content=content, size_hint=(1, 1))
        self._popup.open()

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


class WindowManager(ScreenManager):
    pass


kv_training = Builder.load_file('testing_kivy.kv')


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


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

testing_kivy.kv

代码语言:javascript
复制
WindowManager:
    TrainingWindow:


<TrainingWindow>
    name: "training"

    BoxLayout:
        orientation: "vertical"
        Button:
            text: "Select Training Images"
            font_size: 32
            on_release: root.show_load_list()
        Button:
            text: "Select Training Annots"
            font_size: 32
            on_release: root.show_load_list()

        Button:
            text: "Set Parameters"
            font_size: 32
            on_release:
                app.root.current = "parameters_train"
                root.manager.transition.direction = "up"

        Button:
            text: "Back"
            font_size: 16
            on_release:
                app.root.current = "select"
                root.manager.transition.direction = "right"


<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)

Older_app.py

代码语言:javascript
复制
from kivy.app import App
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.spinner import SpinnerOption
import os
import pandas as pd


def invalid_login():
    app = App.get_running_app()
    app.root.current = "main"
    # Create a BoxLayout to add multiple lines or buttons to a PopUp
    box = BoxLayout()
    # Create PopUp
    pop = Popup(
        title="Invalid Password",
        size_hint=(None, None), size=(200, 100),
        content=box,
        auto_dismiss=False
    )
    # Dismiss PopUp
    box.add_widget(Button(text="Close", on_release=pop.dismiss))
    pop.open()


def model_load(path, filename):
    download_path = os.path.join(path, filename[0])
    print(download_path)


def train_load(path, filename):
    download_path = os.path.join(path, filename[0])
    print(download_path)


def train_model_load(path, filename):
    download_path = os.path.join(path, filename[0])
    print(download_path)


class MainWindow(Screen):
    def login(self):
        if self.ids.password.text == "password":
            self.ids.password.text = ""
            app = App.get_running_app()
            app.root.current = "select"
        else:
            self.ids.password.text = ""
            invalid_login()


class SelectWindow(Screen):
    pass


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


class TrainingWindow(Screen):
    def show_load_list(self):
        content = LoadDialog(load=train_load, cancel=self.dismiss_popup)
        self._popup = Popup(title="Load a file list", content=content, size_hint=(1, 1))
        self._popup.open()

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


class ModelWindow(Screen):
    def show_load_list(self):
        content = LoadDialog(load=model_load, cancel=self.dismiss_popup)
        self._popup = Popup(title="Load a file list", content=content, size_hint=(1, 1))
        self._popup.open()

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


class TrainModelWindow(Screen):
    def show_load_list(self):
        content = LoadDialog(load=train_model_load, cancel=self.dismiss_popup)
        self._popup = Popup(title="Load a file list", content=content, size_hint=(1, 1))
        self._popup.open()

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


class ParametersTrainModelWindow(Screen):
    pass


class ParametersTrainWindow(Screen):
    pass


class WindowManager(ScreenManager):
    pass


class OverViewTrainWindow(Screen):
    pass


class OverViewTrainModelWindow(Screen):
    pass


class OverViewModelWindow(Screen):
    pass


class MyOption(SpinnerOption):
    pass


kv_main= Builder.load_file('main.kv')


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


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

main.kv

代码语言:javascript
复制
#:import utils kivy.utils
#:include select.kv
#:include training.kv
#:include model.kv
#:include train_model.kv
#:include parameters_train.kv
#:include parameters_train_model.kv
#:include overview_train_model.kv
#:include overview_train.kv
#:include overview_model.kv

WindowManager:
    MainWindow:
    SelectWindow:
    TrainingWindow:
    ModelWindow:
    TrainModelWindow:
    ParametersTrainWindow:
    ParametersTrainModelWindow
    OverViewTrainWindow:
    OverViewTrainModelWindow:
    OverViewModelWindow:

<MainWindow>
    name: "main"

    GridLayout:
        cols: 1

        BoxLayout:
            orientation: "vertical"
            canvas.before:
                Color:
                    rgba: 0,0,0,1
                Rectangle:
                    pos: self.pos
                    size: self.size
            Label:
                size_hint: 1, 1
                text: "SPECPHASE"
                font_size: 50
                color:
                    utils.get_color_from_hex('#FF0000')
            Label:
                size_hint: 1, 1
                text: "Object Detection App"
                font_size: 40

        BoxLayout:
            size_hint: 1, 0.005
            canvas.before:
                Color:
                    rgba: (1,1,1,1)
                Rectangle:
                    size: self.size
                    pos: self.pos

        BoxLayout:
            orientation: "horizontal"
            size_hint: (0.35, 0.35)
            padding: (0,0,25,0)

            Label:
                font_size: 20
                text: "Password"
                size_hint: (0.5, 0.35)
                pos_hint: {'x': 1, 'y': 0.4}
                background_color: (0,0,0,1)
                canvas.before:
                    Color:
                        rgba: self.background_color
                    Rectangle:
                        size: self.size
                        pos: self.pos


            TextInput:
                id: password
                multiline: False
                size_hint: (0.5, 0.35)
                pos_hint: {'x': 1, 'y': 0.4}
                focus: True
                background_color:
                    utils.get_color_from_hex('#18B8D9')
                cursor_color: (0,0,0,1)
                password: True


        Button:
            text: "Submit"
            on_release: root.login()

select.kv

代码语言:javascript
复制
<SelectWindow@Screen>:
    name: "select"

    GridLayout:
        cols: 1

        GridLayout:
            cols: 2

            Button:
                text: "Train"
                font_size: 32
                on_release:
                    app.root.current = "training"
                    root.manager.transition.direction = "right"
            Button:
                text: "Model"
                font_size: 32
                on_release:
                    app.root.current = "model"
                    root.manager.transition.direction = "left"

        Button:
            text: "Train & Model"
            font_size: 32
            on_release:
                app.root.current = "train_model"
                root.manager.transition.direction = "up"

training.kv

代码语言:javascript
复制
<TrainingWindow@Screen>:
    name: "training"

    BoxLayout:
        orientation: "vertical"
        Button:
            text: "Select Training Images"
            font_size: 32
            on_release: root.show_load_list()
        Button:
            text: "Select Training Annots"
            font_size: 32
            on_release: root.show_load_list()

        Button:
            text: "Set Parameters"
            font_size: 32
            on_release:
                app.root.current = "parameters_train"
                root.manager.transition.direction = "up"

        Button:
            text: "Back"
            font_size: 16
            on_release:
                app.root.current = "select"
                root.manager.transition.direction = "right"


<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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 00:14:22

在休息了一段时间,重新启动我的大脑后,我找到了问题所在。

不包括在我的问题中,我还有另外几个.kv文件,它们的布局类似于training.kv。它们用于访问其他screens。我发现我在每个screen中都调用了screen,我相信这就是我看到堆叠问题的原因。最后,除了我的training.kv文件中的一个之外,我删除了所有这些内容,而且它们都在工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67201739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档