python - python kivy Boxlayout没有组织它的孩子
问题描述
我正在创建一个简单的 Database-GUI,并希望在表单中添加两行。每行都是一个 DataField-Object,包含一个标签和一个由水平 Boxlayout 组织的 TextInput。到这里一切都好。Form-Widget 还包含一个 BoxLayout(Orientaton:“Vertical”),通过将两个 DataField-Objects 相互列出来组织它们,但它不起作用......我的问题:为什么?我该如何解决?
dbgui3.py
from kivy import require
require("2.0.0")
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty, ObjectProperty
class DataField(Widget):
title = StringProperty()
pass
class Form(Widget):
b = ObjectProperty()
def __init__(self, *rec, **kwargs):
super().__init__()
for df in rec:
self.b.add_widget(DataField(title=df))
class DbGui3(App):
def build(self):
return Form("hello", "world")
if __name__ == '__main__':
DbGui3().run()
dbgui3.kv
<DataField>:
text: txt.text
BoxLayout:
orientation: "horizontal"
size_hint: None, None
size: root.width, 30
canvas:
Color:
rgb: 0.2,0.2,0.2
Rectangle:
size: self.size
Label:
text: root.title
size_hint: None, 1
width: self.texture_size[0]
TextInput:
id:txt
multiline: False
on_text_validate: print("text validated:" + root.text)
<Form>:
b:b
BoxLayout:
id: b
orientation: "vertical"
size_hint: None, None
size: root.width, root.height
canvas:
Color:
rgb: 0.1,0.2,0.3
Rectangle:
size: self.size
解决方案
问题是您正在Widget
用作您的DataField
和类的基Form
类。该类Widget
不会注意到size_hint
,pos_hint
和其他内容。它不打算成为Layout
. 我建议你使用BoxLayout
作为你的基础DataField
和其他一些Layout
(也许FloatLayout
)作为Form
. 使用此建议,您的类定义可能是:
class DataField(BoxLayout):
title = StringProperty("example")
class Form(FloatLayout):
pass
然后修改你的kv
:
<DataField>:
size_hint: 1, None
height: 30
orientation: "horizontal"
Label:
size_hint: None, None
size: self.texture_size[0]*1.3, root.height
text: root.title
TextInput:
multiline: False
on_text_validate: print(root.title)
<Form>:
BoxLayout:
orientation: "vertical"
size_hint: None, None
size: root.width/2, root.height/2
DataField:
title: "hello"
DataField:
title: "world"
我认为这会做你想要的。
推荐阅读
- postgresql - 可以在 postgres 中同时更新一组连接表吗?
- django - 如何防止用户形成扩展/最小化 TextField Django
- python - 使用 sympy 设置矩阵时遇到问题
- c# - 通过 TCPIP 发送字符串和文件的简单方法
- python - python中多类数据的真阳性率和假阳性率(TPR,FPR)
- php - PHP登录错误
- git - git fetch 正在删除最近在 Jgit 中推送的新文件
- forms - 可访问地检查动态 XFA 表单
- node.js - Nodejs Sharp Image Resize and Upload to S3 超时
- javascript - 可导航表中的过滤行