如何在Kivy设置面板中控制设置菜单列表项名称的字体大小

0 投票
1 回答
17 浏览
提问于 2025-04-12 14:07

我在我的应用程序中尝试使用Kivy的设置面板,但发现设置面板中某些项目的字体大小与我应用程序中的字体大小有关。目前我无法直接设置设置面板的字体大小。在我的应用中,为了显示效果使用了较大的字体,因此在设置面板中,菜单列表和选项列表的部分名称也会使用与应用程序相同的字体大小,这让设置面板看起来很奇怪(无法接受)。

下面的代码是一个Kivy的散点示例(来自geeksforgeeks.org)

scattertest.py文件

import kivy 
from kivy.app import App
kivy.require('1.9.0')  
from kivy.uix.scatter import Scatter 
from kivy.uix.widget import Widget
from kivy.uix.relativelayout import RelativeLayout 

from kivy.uix.settings import SettingsWithSidebar, SettingsWithTabbedPanel
from kivy.logger import Logger

class SquareWidget(Widget): 
    pass

class ScatterWidget(Scatter): 
    pass

class ScatterTest(RelativeLayout): 
    pass

class ScatterTestApp(App): 

    def build(self):                
        self.settings_cls = SettingsWithTabbedPanel
        # self.settings_cls = SettingsWithSidebar
        return ScatterTest()

    def app_open_settings(self):
        App.open_settings(self)

    def close_settings(self, settings=None):
        Logger.info("scattertest.py: App.close_settings: {0}".format(settings))
        super(ScatterTestApp, self).close_settings(settings)

if __name__=='__main__': 
    ScatterTestApp().run() 

scattertest.kv文件

#:kivy 2.1.0

<Label>:
    font_size:50

<SquareWidget>: 
    size: 100, 100
    canvas: 
        Color: 
            rgb: [0.345, 0.85, 0.456] 
        Rectangle: 
            size: self.size 
            pos: self.pos 

<ScatterTest>:
    canvas: 
        Color: 
            rgb: .8, .5, .4
        Rectangle: 
            size: self.size 
            pos: self.pos   

    ScatterWidget: 
        id: square_widget_id  
   
        SquareWidget: 

    Label:
        text: 'Position: ' + str(square_widget_id.pos) 
        size_hint: .1, .1
        pos: 500, 300

在上面的示例中,我在<Label>:下将Label小部件的全局字体大小设置为50,然后在应用部分,'Label'项目将显示'Position: '和后面的点坐标,字体大小为50。

当按下'F1'键时,会显示设置面板。在这里,我将设置面板设置为TabbedPanel样式,我们可以看到面板标签名称使用了50的字体大小,而在选项部分,部分名称也使用了50的字体大小。这让人感觉设置面板有些问题(这些问题项都应该基于Label类)。

我阅读了Kivy的设置文档,但找不到直接设置设置面板字体大小的好方法。

我尝试在.kv文件中设置一个自定义的Label小部件,比如把<Label>:改成<LabelA@Label>:,然后把下面代码中的Label项目改成LabelA,运行应用并显示设置面板,现在设置面板将使用其默认的字体大小,所有项目都合适。这种方法应该是一个解决方案,但我觉得这只是无奈之举。

希望能帮我找到更好的解决方案,谢谢!

1 个回答

0

我找到了一种可能解决我问题的方法,那就是修改Kivy的style.kv文件中与一些小部件相关的设置(Kivy的style.kv文件位于... \Lib\site_packages\kivy\data目录下)。关于这个解决方案的参考资料如下(按我查阅的顺序):

  1. 通过重新定义style.kv来自定义Kivy设置面板
  2. https://kivy.org/doc/stable/api-kivy.lang.html#redefining-a-widget-s-style
  3. 如何在Kivy中自定义style.kv

这个解决方案的基础应该是参考资料#2,它是Kivy文档《Kivy语言》中“重新定义小部件样式”的部分,里面说明我们可以重新定义小部件的一些属性,也就是说我们可以继承小部件的属性,同时去掉一些其他属性,使用我们自己的定义。这样做就是在.kv文件中定义修改过的小部件(注意小部件名称前面的短横线'-')。

<-widgetname>:
    redefined properties

基本上,这种方法就是制作一个自定义的小部件,原则上和我问题中的解决方案是一样的。如果我们不想修改很多设置项,只是想保持设置面板的默认设置,那么我的解决方案会更简单。

撰写回答