Kivy Popup с FileChooserListView в python - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь создать всплывающее окно полностью в Python и вызвать его из синтаксиса kivy, так как у меня была проблема с созданием нескольких всплывающих окон исключительно в kivy. Я пытаюсь напечатать текущий выбранный путь средства выбора файлов в поле метки над фреймом средства выбора файлов . Также ранее я мог изменить цвет фона всего всплывающего окна и прозрачность с помощью background_color и background_normal = '', но с тех пор по какой-то причине команды меняют цвет вокруг всплывающего окна вместо фактического фона всплывающего окна.

Python Код:

    def chooseFilePopup(self):
        #create popup
        self.chosePop = Popup()
        self.chosePop.title = '[b]Choose picture file'
        self.chosePop.title_color = 1, 1, 1, 1
        self.chosePop.title_size = 20
        self.chosePop.title_align = 'center'
        self.chosePop.auto_dismiss = False
        self.chosePop.size_hint = (None, None)
        self.chosePop.size = (640, 480)
        #self.chosePop.background = '' #white background basis
        #self.chosePop.background='GUI\bgclean.jpg'
        #self.chosePop.background_color = (71/255, 118/255, 176/255, 0.75) #Blue, 80% transparency

        #create popup-content
        choseBox = BoxLayout()
        choseBox.orientation = 'vertical'
        choseBox.spacing = 6
        choseBox.padding = 10, 10, 10, 10
        #choseBox.background = ''
        #choseBox.background_color = 0, 0, 0, 0.5

        fichoo = FileChooserListView()
        fichoo.dirselect = True
        #fichoo.path = './'
        #fichoo.on_selection  = lambda *args: refresh_path(fichoo.selection))
        #fichoo.on_submit = lambda *args: refresh_path(self.selection)
        fichoo.on_selection = lambda *args: refresh_path(*args)

        fichooPath = Label()
        fichooPath.size_hint_y = 0.1
        fichooPath.text = 'Current path: '
        fichooPath.halign = 'left'
        fichooPath.pos_hint = {'center_x': 0.1}

        choseBoxLabel = Label()
        choseBoxLabel.text = '[b]Warning![/b]\nMake sure to chose *.png file with resolution 640x480!'
        choseBoxLabel.size_hint_y = 0.3
        choseBoxLabel.font_size = '22'
        choseBoxLabel.halign = 'center'
        choseBoxLabel.color = 1, 1, 1, 1

        choseBox.add_widget(choseBoxLabel)
        choseBox.add_widget(fichooPath)
        choseBox.add_widget(fichoo)

        choseBoxInner = BoxLayout()
        choseBoxInner.orientation = 'horizontal'
        choseBoxInner.spacing = 10
        choseBoxInner.padding = 10, 0, 10, 0
        choseBoxInner.size_hint_y = 0.2

        choseButtonLoad = Button()
        choseButtonLoad.text = 'Load File'
        choseButtonLoad.on_release = lambda *args: load_from_filechooser(fichoo.selection)

        choseButtonCancel = Button()
        choseButtonCancel.text = 'Cancel'
        choseButtonCancel.on_release = lambda *args: self.chosePop.dismiss()

        choseBox.add_widget(choseBoxInner)
        choseBoxInner.add_widget(choseButtonCancel)
        choseBoxInner.add_widget(choseButtonLoad)

        def refresh_path(text):
            print('miau')
            #fichooPath.text = text

        def load_from_filechooser(selection):
            print(str(selection[0]))
            if self.check():
                trixel_demo(str(selection[0]), self.s, 0)    
                self.change_label('Image from file ' + str(selection[0] + ' displayed'))
                self.ids.pictureBox.source = selection[0]
                self.chosePop.dismiss()

        self.chosePop.content = choseBox
        self.chosePop.open()

Вызов из файла .kv:

Button:
    on_release:
        root.chooseFilePopup()
...