首页 > 解决方案 > KIVY:为什么手风琴不能正确加载标题文本可见?

问题描述

出于某种原因,当我运行代码时,我的手风琴标题是黑色的并且标题文本不可见,当将它与手风琴是深灰色和白色文本的示例代码进行比较时。当我单击它时,手风琴的其余部分工作正常,它会展开和关闭。唯一的问题是手风琴标题不能正常工作。

在此处输入图像描述

*.py

#imported from kivy framework
from kivy.app import App
from kivymd.app import MDApp
from kivy.app import App
from kivy.uix.label import Label
from datetime import datetime
from datetime import timedelta
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.image import Image
import dictionaryData
from kivy.lang import Builder
from kivy.base import runTouchApp
import os
from kivy.uix.button import Button
from kivy.uix.accordion import Accordion, AccordionItem



class Main_Screen(Screen):
    pass


class Dictionary_Screen(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        layout = BoxLayout(orientation='vertical')    # instantiate BoxLayout
        self.add_widget(layout)    # add BoxLayout to screen

        btn2 = Button(
            text='change screen',
            size_hint=(.5, .05),
        )
        btn2.bind(on_press=self.changer)
        layout.add_widget(btn2)    # add Button to BoxLayout

        title = ["Title 1", "Title 2", "Title 3", "Title 4", "Title 5"]

        accordion = Accordion(orientation='vertical')    # instantiate Accordion
        layout.add_widget(accordion)    # add Accordion to BoxLayout

        for x in range(2):
            item = AccordionItem(title="Cheese",background_normal= "LogoFF.png")
            item.add_widget(Label(text='Very big content\n' * 2))
            accordion.add_widget(item)    # add AccordionItem to Accordion
    def changer(self,*args):
        print("ww")

#class for all screens
class ScreenManagement(ScreenManager):
   pass

class MainApp(MDApp):
    def build(self):
       # declaring time from python, and making it refresh every second
        self.now = datetime.now()
        Clock.schedule_interval(self.update_clock, 1)


    def update_clock(self, *args):
        self.now = self.now + timedelta(seconds=1)
        self.root.get_screen("Main_Screen").ids["CurrentTime"].text = self.now.strftime("%H:%M:%S")

MainApp().run()

*.kv

#:kivy 1.0
#:import hex kivy.utils.get_color_from_hex
#styles that will apply to all intences for each tag
<MDRaisedButton>:
    font_size:18
<Label>:
    color: 0,0,0,1
#declaring screen managers and printing them in this order
ScreenManagement:
    Main_Screen:
        name: "Main_Screen"
    Dictionary_Screen:
        name: "Dictionary_Screen"
<Main_Screen>:
    FloatLayout:
        spacing: 10
        canvas.before:
            Color:
                rgba: hex('#eff3fa')
            Rectangle:
                size: self.size
                pos: self.pos
        #Navbar
        MDToolbar:
            id: fb
            pos_hint: {'center_x': 0.5, 'top':1.0}
            size_hint_y:None
            height: 50
            title: "Virtual Assistant"
            md_bg_color: hex('#132843')
            Label:
                id: CurrentTime
                font_size:18
                size_hint_x: .1
                color: (1,1,1,1)
        BoxLayout:
            orientation: 'vertical'
            spacing: 10
            padding: 50
            canvas.before:
                Color:
                    rgba: hex('#000')
                Rectangle:
                    size: self.size
                    pos: self.pos
            pos_hint: {'center_x': 0.5, 'center_y': 0.5}
            size_hint: 0.5, 0.5
            Button:
                text: "Dictionary"
                on_release:
                    app.root.current = "Dictionary_Screen"
<Dictionary_Screen>:
    Label:
        id: box
        color: (1,0,1,1)

有没有办法解决这个问题?

标签: pythonpython-3.xkivykivy-language

解决方案


AccordionItemTitle是 a Label,您的规则<Label>:将所有文本全部设置Labels为黑色。您可以通过删除以下行来解决问题:

<Label>:
    color: 0,0,0,1

从您的kv文件中。为kv常用的Widget. 更好的方法是创建一个自定义类,例如:

<BlackLabel@Label>:
    color: 0,0,0,1

BlackLabel在你想要这样的地方使用Label


推荐阅读