kivy - 为什么我的 Kivy 标签文本不适合标签?
问题描述
我对 Kivy 如何调整各种元素的大小存在很大的知识差距,并且它对我修复它的尝试产生了抵制。
这是我的stopwatch.kv
文件
#:kivy 1.11.1
<StopWatch>:
BoxLayout:
orientation: 'vertical'
canvas.before:
Color:
rgba: .2, .2, .2, 1
Rectangle:
pos: self.pos
size: self.size
Label:
text: "A long piece of text #1"
size: self.texture_size
canvas.before:
Color:
rgba: .5, .1, .1, 1
Rectangle:
pos: self.pos
size: self.size
Label:
text: "A long piece of text #2"
size: self.texture_size
text_size: root.width, None
canvas.before:
Color:
rgba: .5, .5, .1, 1
Rectangle:
pos: self.pos
size: self.size
这里是main.py
:
from kivy.app import App
from kivy.uix.widget import Widget
class StopWatch(Widget):
pass
class StopWatchApp(App):
def build(self):
sw = StopWatch()
return sw
if __name__ == '__main__':
StopWatchApp().run()
我已经弄清楚窗口的大小(在我的桌面上)默认情况下与其内容无关。好的。
我已经弄清楚BoxLayout
默认情况下与窗口大小无关的大小。相反,它足够大以包含其子小部件。好的。
我发现Label
默认情况下,a 的大小与其文本内容的大小无关。相反,我认为它是 100x100,但我还没有找到记录。
如果您希望标签足够大以覆盖文本(因此 BoxLayout 以覆盖文本),则必须指定:
size: self.texture_size
好的。但是我对第一个标签这样做了,它仍然超过了它的标签大小(我使用了一个红色的矩形来可视化。)
所以,我尝试在第二个标签中指定 text_size - 使其成为窗口的整个宽度 - 但它的文本根本没有出现!
我知道我遗漏了一些明显的东西,但是阅读手册并没有帮助。
解决方案
问题是您的StopWatch
extends Widget
,而Widget
不是作为容器。请参阅小部件类。
注意上面写着的部分:
- Widget 不是 Layout:它不会改变其子元素的位置或大小。如果您想控制定位或大小,请使用布局。
- 小部件的默认大小为 (100, 100)。仅当父级是布局时才会更改。例如,如果您在 Button 内添加标签,则标签不会继承按钮的大小或位置,因为该按钮不是 Layout:它只是另一个 Widget。
- 默认 size_hint 为 (1, 1)。如果父级是布局,则小部件大小将是父级布局的大小。
所以,你的StopWatch
意志是 size (100,100)
,你Labels
的比这更宽。一个简单的解决方案是更改您StopWatch
的扩展,Layout
如下所示:
class StopWatch(BoxLayout):
pass
然后你可以重写你kv
的:
#:kivy 1.11.1
<StopWatch>:
orientation: 'vertical'
canvas.before:
Color:
rgba: .2, .2, .2, 1
Rectangle:
pos: self.pos
size: self.size
Label:
text: "A long piece of text #1"
size: self.texture_size
canvas.before:
Color:
rgba: .5, .1, .1, 1
Rectangle:
pos: self.pos
size: self.size
Label:
text: "A long piece of text #2"
size: self.texture_size
text_size: root.width, None
canvas.before:
Color:
rgba: .5, .5, .1, 1
Rectangle:
pos: self.pos
size: self.size
请注意,BoxLayout
已从 中删除kv
,因为StopWatch
现在是BoxLayout
. 另外,请注意,除非您设置为,否则您的in yoursize
属性将无效,因为优先于.Labels
kv
size_hint
(None, None)
size_hint
size
推荐阅读
- angularjs - ngtable 外部数据排序、过滤和分页不起作用
- postgresql - 在 linux os 上使用 postgresql 在 opmanager 中重置密码
- javascript - 添加显示更多显示更少按钮
- loops - 在 svg.js 中循环
- java - 在 ArrayList 中创建重复项的列表
- java - 如何在 Java 中的特定给定超时(5 秒)内停止方法执行?
- python-2.7 - TypeError:generate() 只需要 1 个参数(给定 5 个)
- wso2 - 我如何向 inputHandler 提供输入数据
- cmake - 为什么我需要可分离编译?
- javascript - 将图像 URL 转换为文件 - Javascript