首页 > 解决方案 > 有没有办法在 kivy 中使用 twolistitem 和 recycleview 显示所有 .txt 文件

问题描述

我正在尝试使用 kivy 和 kivymd 创建 PDF 和文本阅读器应用程序如何在设备(最好是 Android)中获取 PDF 文件并使用回收视图将它们显示在列表项中这是我的功能以及我的 kv MDIconButton 代码

class Example(MDApp):
    PDFs = ObjectProperty()
    def build(self):
        self.theme_cls.primary_palette = "Red"
        return Builder.load_string(KV)
    def all_pdfs(self):
        for root, dirs, files in os.walk('storage/emulated/0'):
            if file in files.endswith('.pdf'):
                self.PDFs = file
            else:
                return None
        return self.PDFs 

千伏:

                MDTabs:
                    id: tabs
                    on_tab_switch: app.on_tab_switch(*args)
                    
                    Tab1:
                        text: "CATEGORY"
                        
                        MDGridLayout:
                            cols: 3
                            
                            MDIconButton:
                                icon: "pdf-box"
                                user_font_size: "85"
                                on_press: app.theme_cls.primary_color
                                on_press: app.all_pdfs()

标签: pythonkivykivy-languagekivymd

解决方案


你可以使用我的代码,最好的办法是我们可以确保返回书名的函数是否正常工作,Python 和 KivyMD 非常棒,这是 jbsidis 的带有 recycleview 和搜索栏的代码(来自萨尔瓦多的问候):

from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivymd.uix.list import OneLineIconListItem

Window.size = (330, 660)


kv = '''
#:import MDTextField kivymd.uix.textfield.MDTextField
<MyTile@SmartTileWithLabel>
    size_hint_y: None
    height: "240dp"

<S>:
    MDTextFieldRound:
        pos_hint: {"center_x": .5, "center_y": .95}
        normal_color : [1,1,1,.1]
        color_active : [1,1,1,1]
        size_hint: .8, .07
        hint_text : 'Search a product...'
        icon_left : 'magnify'



<JBSIDIS>
    IconLeftWidget:
        icon: "Photos/pro.jpg"

Screen:
    name: "pantalla1"
    MDToolbar:
        id: tb1
        title: "jbsidis"
        pos_hint: {"top": 1}
        md_bg_color: (.1, .1, .5, 1)

    GridLayout:
        cols: 2
        padding: dp(20)
        FloatLayout:
            MDTextFieldRound:
                id: search_field
                pos_hint: {"center_x": .5, "center_y": .87}
                hint_text : 'jbsidis...'
                icon_left : 'magnify'
                normal_color : (100, 100, 50, .5)
                color_active : (255, 255, 255, 0)
                on_text: app.search(root.ids.rvvv9,self.text)

    BoxLayout:
        id: m5
        spacing: dp(10)
        #padding: dp(20)
        pos_hint: {"center_x": .5, "center_y": .32}
        orientation: "vertical"
        BoxLayout:
            id: s_res9
            size_hint_y: None
            height: self.minimum_height
            pos_hint: {"center_x": .5, "center_y": .4}
            orientation: "vertical"
        RecycleView:
            id: rvvv9
            key_viewclass: 'viewclass'
            key_size: 'height'
            RecycleBoxLayout:
                padding: dp(10)
                spacing: dp(5)
                default_size: None, dp(75)
                default_size_hint: 1, None
                size_hint_y: None
                height: self.minimum_height
                orientation: 'vertical'

    MDToolbar:
        id: success_screen_toolbar
        title: "jbsidis"
        pos_hint: {"top": 1}
        right_action_items: [["progress-check", lambda: print(6)]]


    MDBottomAppBar:
        MDToolbar:
            id: success_screen_bottomappbar
            icon: "magnify"
            on_action_button: app.eq(root.ids.search_field,True)
            type: 'bottom'
            mode: 'center'
            #elevation: '8dp'
            left_action_items: [["calendar-text", lambda x: print(6)], ["account-group", lambda x: print(6)]]
            right_action_items: [["magnify", lambda x: app.eq(root.ids.search_field,True)], ["menu", lambda x: print(6)]]

'''
authors="jbsidis"
class JBSIDIS(OneLineIconListItem):
    pass
class blanks1(BoxLayout):
    pass
class S(FloatLayout):
    pass

authors4="jbsidis"
books="""
Austen, Jane (72159) jbsidis
Dickens, Charles (69419) jbsidis
Doyle, Arthur Conan (54432) jbsidis
Twain, Mark (44058) jbsidis
Wilde, Oscar (38059) jbsidis
Carroll, Lewis (35084) jbsidis
Dostoyevsky, Fyodor (30216) jbsidis
Shakespeare, William (27619) jbsidis
Stevenson, Robert Louis (26883) jbsidis
Tolstoy, Leo, graf (26291) jbsidis
Wells, H. G. (Herbert George) (25044) jbsidis
Shelley, Mary Wollstonecraft (23693) jbsidis
Verne, Jules (23131) jbsidis
Melville, Herman (22992) jbsidis
Nietzsche, Friedrich Wilhelm (22577) jbsidis
Garnett, Constance (22148) jbsidis
Homer (21636) jbsidis
Dumas, Alexandre (20477) jbsidis
Plato (19449) jbsidis
Baum, L. Frank (Lyman Frank) (19100) jbsidis
Montgomery, L. M. (Lucy Maud) (18415) jbsidis
Jowett, Benjamin (18245) jbsidis
Kipling, Rudyard (18032) jbsidis
Joyce, James (17325) jbsidis
London, Jack (17298) jbsidis
Doré, Gustave (16953) jbsidis
Poe, Edgar Allan (16269) jbsidis
Christie, Agatha (15959) jbsidis
Conrad, Joseph (15922) jbsidis
Kafka, Franz (15913) jbsidis
Dante Alighieri (15710) jbsidis
Fitzgerald, F. Scott (Francis Scott) (15486) jbsidis
Hawthorne, Nathaniel (15394) jbsidis
Lang, Andrew (15051) jbsidis
Widger, David (14877) jbsidis
Stoker, Bram (14832) jbsidis
Chesterton, G. K. (Gilbert Keith) (14666) jbsidis
Leblanc, Maurice (14627) jbsidis
Ibsen, Henrik (14583) jbsidis jbsidis
Swift, Jonathan (14152) jbsidis
Grimm, Jacob (13991) jbsidis
Grimm, Wilhelm (13991) jbsidis
Alcott, Louisa May (13968) jbsidis
Machiavelli, Niccolò (13952) jbsidis
Maude, Aylmer (13944) jbsidis
Maude, Louise (13883) jbsidis
Wyllie, David (Translator) (13872) jbsidis
Wodehouse, P. G. (Pelham Grenville) (13477) jbsidis
Russell, Bertrand (13379) jbsidis
James, Henry (13325) jbsidis
Pope, Alexander (13181) jbsidis
Hugo, Victor (13110) jbsidis
Marriott, W. K. (William Kenaz) (12711) jbsidis
Brontë, Charlotte (12398) jbsidis
Burnett, Frances Hodgson (12353) jbsidis
Rizal, José (12351) jbsidis
Cervantes Saavedra, Miguel de (12268) jbsidis
Thoreau, Henry David (12154) jbsidis
Barrie, J. M. (James Matthew) (12065) jbsidis
Scott, Walter (11733) jbsidis
Chekhov, Anton Pavlovich (11617)
Defoe, Daniel (11366) jbsidis
Burton, Richard Francis, Sir (11267)
Shaw, Bernard (11254) jbsidis
Terry, W. E. (11105) jbsidis
Morley, Henry (11017) jbsidis
Townsend, F. H. (Frederick Henry) (10812) jbsidis
Gilman, Charlotte Perkins (10547) jbsidis
Balzac, Honoré de (10432) jbsidis
Haggard, H. Rider (Henry Rider) (9979) jbsidis
Maupassant, Guy de (9907) jbsidis
Potter, Beatrix (9819) jbsidis
Goethe, Johann Wolfgang von (9794) jbsidis
Cary, Henry Francis (9754) jbsidis
Leech, John (9693) jbsidis
Buckley, Theodore Alois (9685) jbsidis
Butler, Samuel (9469) jbsidis
Wharton, Edith (9291) jbsidis
Ormsby, John (9146) jbsidis
Gibran, Kahlil (9031) jbsidis
Burgess, Thornton W. (Thornton Waldo) (8915) jbsidis
Morris, Richard (8866) jbsidis
Hapgood, Isabel Florence (8694) jbsidis
Hardy, Thomas (8624) jbsidis
Bierce, Ambrose (8495) jbsidis
Kemble, E. W. (Edward Windsor) (8084) jbsidis
Irving, Washington (8068) jbsidis
Burroughs, Edgar Rice (7949) jbsidis
Yeto, Genjiro (7930) jbsidis
Noguchi, Yoné (7774) jbsidis
Tagore, Rabindranath (7768) jbsidis
Eliot, George (7692) jbsidis
Nesbit, E. (Edith) (7648) jbsidis
Du Bois, W. E. B. (William Edward Burghardt) (7364) jbsidis
Stowe, Harriet Beecher (7362) jbsidis
Vatsyayana (7343) jbsidis
Schopenhauer, Arthur (7317) jbsidis
Foote, Mary Hallock (7308) jbsidis
Bhide, Shivaram Parashuram (7256) jbsidis
Indrajit, Bhagavanlal (7256) jbsidis
"""

class Main(MDApp):
    def build(self):
        self.theme_cls.primary_palette = "Red"
        return Builder.load_string(kv)
    def all_pdfs(self):
        return books.splitlines()
##I think this function requires something else
##        for root, dirs, files in os.walk('storage/emulated/0'):
##            if file in files.endswith('.pdf'):
##                self.PDFs = file
##            else:
##                return None
    def eq(self,a,b):
        a.focus=True
    def search(self,a,b):
        a.data=[]
        for x in self.all_pdfs():
            if b in str(x):
                a.data.append(
                {
                    "viewclass": "JBSIDIS",
                    "markup": True,
                    "text": "[b][size=33]jbsidis: [/b][/size]"+str(x)
                }
                    )
        pass


Main().run()

这是图片,您也可以访问我的 youtube 频道并观看我的视频:Black-Hands https://www.youtube.com/channel/UCIMmPyY7XjWHk1AHlR_UdWQ/videos

在此处输入图像描述


推荐阅读