按钮和标签文本不显示

问题描述 投票:0回答:3

图片中的两个窗口是完全相同的副本(同一行代码),唯一的区别是右侧窗口是屏幕管理器内的屏幕,但不知何故右侧窗口不显示文本。

我不确定问题是什么,并且在研究时找不到与之相关的任何内容。

右窗口 Python 文件:

import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.config import Config
space = ""

x = [(a * 9), (a*16)]
Config.set('graphics', 'width', x[0])
Config.set('graphics', 'height', x[1])

class MainScreen(Screen):
    pass

class SecondScreen(Screen):
    pass

class ThirdScreen(Screen):
    pass


kv = Builder.load_file("main2.kv")
class ComplimentUI(App):
    def build(self):
        return kv
    def change_screen(self, x):
        scrnmanager = self.root.ids['sm']
        scrnmanager.current = x

if __name__ == "__main__":
    ComplimentUI().run()

右侧窗口生成器文件:(main2.kv)

#:include secondscreen.kv
#:include thirdscreen.kv

<MainScreen>:
    canvas.before:
         Color:
            rgb: .59, .74, .20
        Rectangle:
            size: self.size
            pos: self.pos
        FloatLayout:
            TextInput:
                pos_hint: {'center_x':1, 'top':.1}
                size_hint: .1,.1
                multiline: False
                font_size: 20
                font_name: "Dimbo Regular"
                background_normal: ''
                background_color: 0,0,0,0

            Button:
                text: "PLAY!"
                pos_hint: {'center_x':.5, 'center_y':.3}
                size_hint: .8, .17
                font_name: "Splatch"
                color: 0.15, .5, 0.2, 1
                font_size: 0.14 * self.width
                background_normal: ''
                background_color: 0,0,0,0
                on_press:
                print("pressed, navigating to prev screen")
                app.change_screen("screentwo")
                root.manager.transition.direction = "left"
                canvas.before:
                    Color:
                        rgb: 1,1, .8,1
                    RoundedRectangle:
                        size: self.size
                        pos: self.pos
                        radius: [4,]

ScreenManager:
    GridLayout:
        cols: 1
        ScreenManager:
            id: sm
        MainScreen:
            name: "screenone"
            id: screenone
        SecondScreen:
            name: "screentwo"
            id: screentwo
        ThirdScreen:
            name: "thirdscreen"
            id: thirdscreen[enter image description here][1]

左窗口Python文件:

import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.config import Config
space = "";

x = [(a * 9), (a*16)]
Config.set('graphics', 'width', x[0])
Config.set('graphics', 'height', x[1])

kv = Builder.load_file("main.kv")
class MyMainApp(App):
    def build(self):
        return kv

if __name__ == "__main__":
    MyMainApp().run()

左窗口生成器文件:(main.kv)

FloatLayout:
    canvas.before:
        Color:
            rgb: .59, .74, .20
        Rectangle:
            size: self.size
            pos: self.pos
    TextInput:
        pos_hint: {'center_x':1, 'top':.1}
        size_hint: .1,.1
        multiline: False
        font_size: 20
        font_name: "Dimbo Regular"
        background_normal: ''
        background_color: 0,0,0,0

    Button:
        text: "PLAY!"
        pos_hint: {'center_x':.5, 'center_y':.3}
        size_hint: .8, .17
        font_name: "Splatch"
        color: 0.15, .5, 0.2, 1
        font_size: 0.14 * self.width
        background_normal: ''
        background_color: 0,0,0,0
        on_press:
            print("pressed, navigating to prev screen")
            app.change_screen("screentwo")
            root.manager.transition.direction = "left"
        canvas.before:
            Color:
                rgb: 1,1, .8,1
            RoundedRectangle:
                size: self.size
                pos: self.pos
                radius: [4,]

新编辑:

正如我在下面的评论中指出的,

secondscreen.kv
thirdscreen.kv
的FloatLayout也会出现同样的问题,如果我将其放在左侧窗口的构建器文件中,这是正常的。但是当我将它放在屏幕管理器的屏幕内(如右侧窗口)时,它就消失了。我的所有屏幕都会出现同样的问题。我只放
mainscreen.kv
的原因是因为它是所有屏幕中最短的,但尽管如此,我仍然会提供文件,但只有 1 个版本(用于右侧窗口的版本),因为它们基本上是相同的线路。 (唯一的区别是为其类名添加了第一行,并稍微进行了缩进更改以适应级别)

第二个屏幕生成器文件:

<SecondScreen>:
    FloatLayout:
        canvas.before:
            Color:
                rgb: .59, .74, .20
            Rectangle:
                size: self.size
                pos: self.pos
        TextInput:
            pos_hint: {'center_x':.5, 'center_y':.56}
            size_hint: .8, .3
            multiline: False
            font_size: 20
            font_name: "Dimbo Regular"
            background_normal: ''
            background_color: 1, 1, .8, 1

        Label:
            pos_hint: {'center_x':.5, 'center_y':.76}
            size_hint: .8, .07
            text: "NAME!"
            font_size: 0.8 * self.height
            font_name: "kidsrock"
            color: 0.15, .5, 0.2, 1
            background_color: 0,0,0,0
            canvas.before:
                Color:
                    rgb: 1,1, .8,1
                RoundedRectangle:
                    size: self.size
                    pos: self.pos
                    radius: [4,]

        Button:
            text: "<<<"
            size_hint: .28, .07
            pos_hint: {'center_x':.24, 'center_y':.1}
            font_name: "kidsrock"
            color: 0.15, .5, 0.2, 1
            font_size: 0.35 * self.width
            background_normal: ''
            background_color: 0,0,0,0
            on_press:
                print("pressed, navigating to prev screen")
                app.change_screen("screenone")
                root.manager.transition.direction = "right"
            canvas.before:
                Color:
                    rgb: 1,1, .8,1
                RoundedRectangle:
                    size: self.size
                    pos: self.pos
                    radius: [4,]
        Button:
            pos_hint: {'center_x':.8, 'center_y':.35}
            size_hint: .2, .07
            background_normal: ''
            background_color: 0,0,0,0
            color: 0.15, .5, 0.2, 1
            text: "ENTER"
            font_name: "kidsrock"
            font_size: 0.25 * self.width
            on_press:
                print("pressed, navigating to next screen")
                app.change_screen("thirdscreen")
                root.manager.transition.direction = "left"
            canvas.before:
                Color:
                    rgb: 1,1, .8,1
                RoundedRectangle:
                    size: self.size
                    pos: self.pos
                    radius: [4,]

第三屏幕生成器文件:

<ThirdScreen>:
    FloatLayout:
        canvas.before:
            Color:
                rgb: .59, .74, .20
            Rectangle:
                size: self.size
                pos: self.pos
        TextInput:
            pos_hint: {'center_x':1, 'top':.1}
            size_hint: .1, .1
            multiline: False
            font_size: 20
            font_name: "Dimbo Regular"
            background_normal: ''
            background_color: 0, 0, 0, 0

        Label:
            pos_hint: {'center_x':.5, 'center_y':.71}
            size_hint: .8, .17
            text: "COMPLIMENT!"
            font_size: 20
            font_name: "kidsrock"
            color: 0.15, .5, 0.2, 1
            background_color: 0,0,0,0
            canvas.before:
                Color:
                    rgb: 1,1, .8,1
                RoundedRectangle:
                    size: self.size
                    pos: self.pos
                    radius: [4,]

        Button:
            pos_hint: {'center_x':.24, 'center_y':.1}
            size_hint: .28, .07
            font_name: "kidsrock"
            color: 0.15, .5, 0.2, 1
            font_size: 0.35 * self.width
            text: "<<<"
            background_normal: ''
            background_color: 0,0,0,0
            on_press:
                print("pressed, navigating to prev screen")
                app.change_screen("screentwo")
                root.manager.transition.direction = "right"
            canvas.before:
                Color:
                    rgb: 1,1, .8,1
                RoundedRectangle:
                    size: self.size
                    pos: self.pos
                    radius: [4,]

新-新编辑!:

更新 重新启动计算机后,现在看起来像这样。

python kivy kivy-language
3个回答
1
投票

根本原因 - 按钮和标签文本未显示

最可能的原因是文本的默认 color 是白色 ([1, 1, 1, 1]),并且两个小部件的背景颜色也是白色。您需要将文本颜色设置为非白色,例如黑色 ([0, 0, 0, 1])。

文本输入框 - 未显示

由于

background_normal: ''
background_color: 0,0,0,0
,TexInput 框在两个窗口(左和右)中都不可见。

将它们注释掉,文本输入框将可见。

按钮的文本“PLAY” - 未显示在右侧窗口中

它可能是包含 kv 文件中的某些内容,例如

secondscreen.kv
和/或
thirdscreen.kv
导致可见性。注释掉这两个 kv 文件以解决问题。

示例

以下右侧窗口的示例,即使用

ScreenManager
能够显示
Button
的文本“PLAY”以及
TextInput
框。

主右.py

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder


class MainScreen(Screen):
    pass


class SecondScreen(Screen):
    pass


class ThirdScreen(Screen):
    pass


kv = Builder.load_string("""
# :include secondscreen.kv
# :include thirdscreen.kv

<MainScreen>:
    canvas.before:
        Color:
            rgb: .59, .74, .20
        Rectangle:
            size: self.size
            pos: self.pos
    FloatLayout:
        TextInput:
            hint_text: 'Type here'
            pos_hint: {'center_x':1, 'top':.1}
            size_hint: .1,.1
            multiline: False
            font_size: 20
            # font_name: "Dimbo Regular"
            # background_normal: ''
            # background_color: 0,0,0,0

        Button:
            text: "PLAY!"
            pos_hint: {'center_x':.5, 'center_y':.3}
            size_hint: .8, .17
            #font_name: "Splatch"
            color: 0.15, .5, 0.2, 1
            font_size: 0.14 * self.width
            background_normal: ''
            background_color: 0,0,0,0
            on_press:
                print("pressed, navigating to prev screen")
                app.change_screen("screentwo")
                root.manager.transition.direction = "left"
            canvas.before:
                Color:
                    rgba: 1, 1, .8, 1
                RoundedRectangle:
                    size: self.size
                    pos: self.pos
                    radius: [4,]

GridLayout:
    cols: 1
    ScreenManager:
        id: sm
        MainScreen:
            name: "screenone"
            id: screenone
        SecondScreen:
            name: "screentwo"
            id: screentwo
        ThirdScreen:
            name: "thirdscreen"
            id: thirdscreen
""")


class RightWindow(App):
    title = "ComplimentUI"

    def build(self):
        return kv


if __name__ == "__main__":
    RightWindow().run()

输出


0
投票

我遇到了类似的问题,对我来说,错误是按钮的 size_hint_x 声明。一旦我删除它,文本就可见了。


0
投票

就我而言,因为我使用了字体版本,不包含拉丁字符,但包含波斯语,我更改了版本,问题就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.