- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试在设置中创建一个选项来更改标签的字体大小。
我尝试使用属性,以便当用户在“设置”中更改字体大小时,结果/更改将立即显示。相反,更改仅在重新启动应用程序时生效。这是我的代码供引用。
示例.py
import kivy
from kivy.properties import *
from kivy.uix.settings import SettingsWithSidebar
from kivy.uix.label import Label
from kivy.config import ConfigParser
from kivy.app import App
example_config = ConfigParser()
example_config.read("example.ini")
class TitleLabel(Label):
font_size = ConfigParserProperty(defaultvalue=40, section="style", key="font_size",
config=example_config, rebind=True)
class ExampleApp(App):
def build(self):
self.settings_cls = SettingsWithSidebar
self.use_kivy_settings = False
def build_config(self, config):
config.setdefaults(
"style", {"font_size": 40}
)
def build_settings(self, settings):
settings.add_json_panel("Settings", self.config, "settings.json")
if __name__ == "__main__":
ExampleApp().run()
示例.kv
FloatLayout:
TitleLabel:
SettingsButton:
<TitleLabel>:
text: "[color=#30C9E9]ExampleTitleText[/color]"
markup: True
font_size: int(root.font_size)
size_hint: None, None
size: self.texture_size
pos_hint: {"center_x": 0.5, "center_y": 0.5}
<SettingsButton@Button>:
text: "Settings"
size_hint: 0.1, 0.1
pos_hint: {"right": 0.975, "top": 0.975}
on_release: app.open_settings()
settings.ini
[
{
"type": "numeric",
"title": "Font Size",
"desc": "Pick how big you want the font to be.",
"section": "style",
"key": "font_size"
}
]
我尝试链接 ConfigParserProperty()
到font_size
(在 example.kv
下 <TitleLabel>
)。我尝试链接 NumericProperty(example_config.get("style", "font_size"))
到font_size
还。两者都不起作用。我知道它必须与属性有关,但我不知道如何设置它。
如果您知道如何解决此问题,我们将非常感谢您的帮助。
最佳答案
kivy 团队有一个例子可以做到这一点。我认为其中重要的是他们用来更新所有修改值的 on_config_change 方法 - 希望它有所帮助
"""
Config Example
==============
This file contains a simple example of how the use the Kivy settings classes in
a real app. It allows the user to change the caption and font_size of the label
and stores these changes.
When the user next runs the programs, their changes are restored.
"""
from kivy.app import App
from kivy.uix.settings import SettingsWithTabbedPanel
from kivy.logger import Logger
from kivy.lang import Builder
# We first define our GUI
kv = '''
BoxLayout:
orientation: 'vertical'
Button:
text: 'Configure app (or press F1)'
on_release: app.open_settings()
Label:
id: label
text: 'Hello'
'''
# This JSON defines entries we want to appear in our App configuration screen
json = '''
[
{
"type": "string",
"title": "Label caption",
"desc": "Choose the text that appears in the label",
"section": "My Label",
"key": "text"
},
{
"type": "numeric",
"title": "Label font size",
"desc": "Choose the font size the label",
"section": "My Label",
"key": "font_size"
}
]
'''
class MyApp(App):
def build(self):
"""
Build and return the root widget.
"""
# The line below is optional. You could leave it out or use one of the
# standard options, such as SettingsWithSidebar, SettingsWithSpinner
# etc.
self.settings_cls = MySettingsWithTabbedPanel
# We apply the saved configuration settings or the defaults
root = Builder.load_string(kv)
label = root.ids.label
label.text = self.config.get('My Label', 'text')
label.font_size = float(self.config.get('My Label', 'font_size'))
return root
def build_config(self, config):
"""
Set the default values for the configs sections.
"""
config.setdefaults('My Label', {'text': 'Hello', 'font_size': 20})
def build_settings(self, settings):
"""
Add our custom section to the default configuration object.
"""
# We use the string defined above for our JSON, but it could also be
# loaded from a file as follows:
# settings.add_json_panel('My Label', self.config, 'settings.json')
settings.add_json_panel('My Label', self.config, data=json)
def on_config_change(self, config, section, key, value):
"""
Respond to changes in the configuration.
"""
Logger.info("main.py: App.on_config_change: {0}, {1}, {2}, {3}".format(
config, section, key, value))
if section == "My Label":
if key == "text":
self.root.ids.label.text = value
elif key == 'font_size':
self.root.ids.label.font_size = float(value)
def close_settings(self, settings=None):
"""
The settings panel has been closed.
"""
Logger.info("main.py: App.close_settings: {0}".format(settings))
super(MyApp, self).close_settings(settings)
class MySettingsWithTabbedPanel(SettingsWithTabbedPanel):
"""
It is not usually necessary to create subclass of a settings panel. There
are many built-in types that you can use out of the box
(SettingsWithSidebar, SettingsWithSpinner etc.).
You would only want to create a Settings subclass like this if you want to
change the behavior or appearance of an existing Settings class.
"""
def on_close(self):
Logger.info("main.py: MySettingsWithTabbedPanel.on_close")
def on_config_change(self, config, section, key, value):
Logger.info(
"main.py: MySettingsWithTabbedPanel.on_config_change: "
"{0}, {1}, {2}, {3}".format(config, section, key, value))
MyApp().run()
关于python - 为什么改变字体大小后没有立即改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60367782/
我希望在我的应用程序下载信息时显示 Toast 消息,但即使我将它放在我的代码之前,它也不会在下载完成后出现。将我的代码放在一个单独的线程中会引起很多麻烦,但是将 toast 放在一个单独的线程中也不
面临即时应用更新模式的问题。成功完成应用程序更新后,一切都关闭并且不重新启动应用程序。这就是问题所在。 但是android文档说: A full screen user experience that
我有一张 table 我有一个 anchor 标记,
我正在开发一个具有两个线程的 Java/Seam/Hibernate/Glassfish 应用程序: 线程 #1 发送各种消息并将摘要信息写入 MySQL 数据库。 线程 #2 定期轮询数据库(由 S
我找不到规范的相关部分来回答这个问题。在 Java 中的条件运算符语句中,是否同时评估真假参数? 以下是否会抛出 NullPointerException Integer test = null; t
大家下午好, 我想知道是否有办法使类的静态 block 运行,即使类本身没有被引用? 我知道它是延迟加载的,因此只需调用该类的任何函数即可开始启动该类, 但是,我希望该类在任何调用之前启动,换句话说,
我正在尝试使用 jQuery prop() 方法禁用元素(表单字段)。有两个字段,一个叫做fee,一个叫做currency。每当 fee 设置为 0 时,第二个字段 currency 将被禁用。这样做
我想为 UIButton 的缩放设置动画,并在完成后再次为缩放设置动画,但让它在没有动画的情况下旋转。我尝试将旋转变换放在没有持续时间的动画调用中,但不知何故它仍然成为缩放动画的一部分或替换缩放动画。
在 js 代码中,我创建了 3 个按钮 --- 按钮 1...按钮 2...按钮 3和 3 个输入字段 --- 输入字段 1...输入字段 2...输入字段 3 从脚本开始所有按钮都被禁用 只有当输入
我正在使用一个 threading.Thread() 来完成它的工作并返回 。它的返回记录在打印语句中,所以我确信有时候是这样的。然而,依靠 threading.active_count() 和 th
我正在使用 IntelliJ 9,我很好奇是否有任何与 Visual Studio“即时”调试窗口等效的 IntelliJ。在编辑器中选择所需的表达式,然后 ALT-F8 来评估表达式,但我希望能够在
我有一个两个标签页,一个标签是记录列表,点击记录会切换到编辑标签,编辑标签中有保存和取消按钮。 现在,我单击记录 #1,进行一些编辑,然后单击取消按钮。当然我不想验证表单,因为它被取消了,所以我设置了
我有一个 A viewController,首先,我呈现 B viewController,经过一些工作后,我需要关闭 B viewController 并呈现 C viewController,所以
我希望能够在文本框中输入内容,当用户在文本框中输入内容时,我希望程序无需单击按钮即可自动读取文本框。 例子:用户类型:“abcd”当用户输入时,程序会显示每个字母对应的数字。 程序输出:“1234”
如果任何表单输入发生更改,如何立即更改提交按钮文本? //This applies to whole form $('#test').change(function() { $("#send").
主要功能: var interval; function refreshId(sessio
假设我有一个包含这些列的 data.table nodeID hour1aaa hour1bbb hour1ccc hour2aaa hour2bbb hour2ccc .
根据vimeo js-api doc ,事件 finish - 当视频播放结束时触发。 出于某种原因,我无法让它工作,finish 事件总是立即调用,我做错了什么吗? 我试图让嵌入的视频在播放完毕后消
我想滑动当前ul元素下的所有li元素和slideDown li元素 $(document).ready(function(){ $("li").slideUp(); }); $(".nav")
我有一个表-compositeView,其中有行-itemView。每行都有许多事件 - 单击、更改等等。 在某些状态下,我想“锁定”表。禁用按钮并取消事件。 是否有一种好方法可以立即取消 itemv
我是一名优秀的程序员,十分优秀!