在 Kivy 中更改颜色 TabbedPanelHeader

Posted

技术标签:

【中文标题】在 Kivy 中更改颜色 TabbedPanelHeader【英文标题】:Changing color TabbedPannelHeader in Kivy 【发布时间】:2016-09-02 15:25:00 【问题描述】:

我尝试了很多不同的方法,但都没有解决这个问题。 当我更改按钮的颜色时,对于 (0,0,1,1) 我有蓝色。如果我对 TabbedPannel 使用相同的列表,我有深蓝色,对于 (0, 0, 1, 0) 我有白色。就像我有一个黑色背景,我总是混合使用它和任何其他颜色,但我无法获得特定的颜色。这也发生在 Spinner 上,但不会发生在标签或按钮上。我该怎么办?我尝试使用 default_tab_cls,但是,我可以想象它只是更改了默认选项卡。

第一次回答后的版本:

这是我遇到问题的部分。我调用一个返回我的 TabbedPanelHeader 的函数。 this 一切正常。font_padrao 是一种自定义字体,效果很好。此示例返回白色背景和蓝色字体。例如,如果我将 background_color 更改为 (0,0,1,1),则蓝色与我在 Button 中执行相同操作时的蓝色不同。在那里,蓝色是“真正的蓝色”,而不是“深蓝色”或类似的东西。

return TabbedPanelHeader(text=nome, background_color = (0, 0, 1, 0), font_name=fonte_padrao, color = (0,0,1,1))

【问题讨论】:

您没有提供足够的信息...请提供一个小示例 kivy 程序来演示您的问题 抱歉,Joran,我现在添加了更多信息。主要问题是我在 TabbedPanelHeader 中的背景颜色与我在 Button 中的背景颜色不同。 Spinner 对我也表现出类似的奇怪行为。 【参考方案1】:

我在 Windows 上,所以默认背景是黑色 afaik,但可能在其他操作系统上会有不同的背景

在你的main.py

from functools import partial
import rotinas
Window.clearcolor = (1, 1, 1, 1) <-----
import sqlite3 as sql
from datetime import *

如果您在着色中使用 alpha==0,那就是您的白色。删除该行,您将拥有默认的 Kivy 背景,即 black

接下来,Label 本身没有图像作为背景,因此使用变量或画布指令更改其背景颜色会产生清晰的颜色。在诸如Spinner 之类的小部件中,或者基本上任何颜色与透明不同的东西中,最有可能使用来自atlas 的图像作为背景(从画布设置内容比更改png 效率低——至少需要更多代码行)。

当您使用具有图像作为背景的小部件时,更改背景颜色仅着色用作背景的图像,即atlas。有你的问题,因为你可能想要一个清晰的颜色或使用TabbedPanelHeader-blue(有色的)。两个例子:

这里有浅蓝色(background_normal 不是必需的,kivy 默认设置为这样)

from kivy.lang import Builder
from kivy.base import runTouchApp
from kivy.uix.boxlayout import BoxLayout
Builder.load_string('''
<Test>:
    TabbedPanelHeader
        color: (0,0,1,1)
        text:'blaaaaaaa'
        background_color: (0, 0, 1, 1)
        background_normal: 'atlas://data/images/defaulttheme/tab_btn'
''')
class Test(BoxLayout):pass
runTouchApp(Test())

这里有标准的、清晰的颜色(见空的background_normal):

from kivy.lang import Builder
from kivy.base import runTouchApp
from kivy.uix.boxlayout import BoxLayout
Builder.load_string('''
<Test>:
    TabbedPanelHeader
        color: (0,0,1,1)
        text:'blaaaaaaa'
        background_color: (0, 0, 1, 1)
        background_normal: ''
''')
class Test(BoxLayout):pass
runTouchApp(Test())

PS:使用pep8或自己安装一个(pip install pep8),让您的代码更具可读性。一年后你会遇到很多调试问题,相信我。它可能工作得很好,但你扼杀了 python 的可读性。

我还在您的 zip 中看到了一些 .db 文件,但没有打开它们。您将数据库发布给您肯定不知道如何处理它的人的事情是不好的。更糟糕的是,您甚至公开发布了它。假设您在该数据库中有个人数据、银行帐号或其他信息 - 您不想为丢失或滥用它们负责,对吗?

【讨论】:

KeyWeeUsr,感谢您的回答,但这绝对不是问题。我在这里放了一张图片:doatlanticoaopacifico.com/app/problem_color.png 背景完全相同的元组,但结果不同。还有更多:在这个例子中,字体和背景都是(0,0,1,1),但我们可以阅读文本!奇怪,不是吗? TabbedPanelHeader 使用默认主题 (atlas://) 中的图像作为背景,如果您想以相同的颜色获得相同的结果,您也必须使用该图像。此外,您绝对应该在您的问题 first 中包含类似这样的内容(截图、sn-ps、...):P 我尝试做 background_disabled_image='' 和 background_image='',但没有任何改变。还尝试将两者都设置为现有图形,但没有任何改变。但是,正如你所说,如果我把一张图片全是蓝色的,用我想要的蓝色,我可以得到正确的颜色,对吧?但是为什么我不能使用 background_image 设置图片呢? 变量有different名称而不是“background_image”,正确使用它,它应该可以工作。是的,当你正确使用颜色时,你可以设置任何你喜欢的颜色。选择 any color 并除以 255(例如 R/255),这就是 (r, g, b, a) 的第一个数字的值。 正确理解:如果一个小部件有bg-image,用着色你给图像着色,如果没有,你将颜色设置为背景。 非常感谢!!!!!!也感谢其他提示,希望将来能写出更好的代码。我注意到一件重要的事情:android 和 PC 中的行为是不同的。如果我只是使用您的旧技巧(将所有背景设置为空,总而言之,我已经完成了),那么在 android 中不会出现这个问题。我将 Window.clearcolor = (1, 1, 1, 1) 更改为 Window.clearcolor = (1, 1, 1, 0) 并且在 PC 上没有任何变化,但在 android 上,这两个选项都起作用并制作了“好蓝色”。关于 db,我没有发送任何个人数据,但也感谢您的提示。

以上是关于在 Kivy 中更改颜色 TabbedPanelHeader的主要内容,如果未能解决你的问题,请参考以下文章

Kivy 选项卡式面板不会更改背景颜色

python - 如何在python的kivy app模块中更改屏幕背景的颜色?

如何更改 Kivy 中按钮的背景颜色?

Kivy - 如果满足条件,如何更改每个文本输入的颜色

Kivy 中的更改颜色按钮

Python Kivy - 更改标签颜色