我尝试在我的应用程序中使用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
在上面的示例中,我在
当按下“F1”键时,它将显示设置面板,在这里我使用 TabbedPanel 样式设置设置面板,我们可以看到面板选项卡名称使用字体大小 50,并且在选项部分中也显示了部分名称使用字体大小 50。这让我们感觉设置面板出了问题(所有这些问题项都应该基于 Label 类)。
我阅读了Kivy设置文档,但我找不到直接设置设置面板字体大小的好方法。
我尝试在 .kv 文件中设置自定义标签小部件,例如将
希望可以帮助我得到更好的解决方案,谢谢!
我找到了一种方法可以解决我的问题,那就是修改Kivy style.kv文件中与某些小部件相关的一些设置(Kivy style.kv位于...\Lib\site_packages\kivy\ data 目录),有关此解决方案的参考如下(按我的参考顺序),
这个解决方案的基础应该是参考#2,它是Kivy文档“Kivy Language”中的“Redefining a widget's style”部分,它指出我们可以重新定义一个widget的一些属性,即我们可以继承这些属性一个小部件的属性,并且没有一些将使用我们自己的定义的其他属性。这种方法是在 .kv 文件中定义修改后的小部件(注意小部件名称前的破折号“-”)
<-widgetname>:
redefined properties
基本上这种方式就是制作一个自定义小部件,原则上它与我的问题中的解决方案相同。如果我们不修改很多设置项,只想保留设置面板的默认设置,那么我的解决方案就更简单了。