我是kivy框架的新手,我正在尝试使用GridLayout创建三列。在第3列中,我想将元素的宽度更小并且向右对齐(我不想更改整个列宽),但是我的尝试不起作用。
main.py
from kivy.app import App
from kivy.uix.widget import Widget
class AppCore(Widget):
pass
class TestApp(App):
def build(self):
return AppCore()
def run_app():
TestApp().run()
if __name__ == '__main__':
run_app()
test.kv
<AppCore>
GridLayout:
cols: 3
size: root.width * 0.8, root.height * 0.8
row_default_height: 30
row_force_default: True
center: root.width / 2, root.height / 2
Label:
text: 'hello world'
TextInput:
id: text_field
multiline: False
Button:
id: f_but
padding_right: 0
width: 10
答案 0 :(得分:1)
解决方案是在第三列中建立AnchorLayout
,并在该布局中设置按钮:
<AppCore>
GridLayout:
cols: 3
size: root.width * 0.8, root.height * 0.8
row_default_height: 30
row_force_default: True
center: root.width / 2, root.height / 2
Label:
text: 'hello world'
TextInput:
id: text_field
multiline: False
AnchorLayout:
anchor_x: 'right'
Button:
id: f_but
width: 40
size_hint_x: None
为了更好地想象,让我们放置背景颜色:
<AppCore>
GridLayout:
cols: 3
size: root.width * 0.8, root.height * 0.8
row_default_height: 30
row_force_default: True
center: root.width / 2, root.height / 2
Label:
text: 'hello world'
canvas.before:
Color:
rgba: 1, 0, 0, 1
Rectangle:
pos: self.pos
size: self.size
TextInput:
id: text_field
multiline: False
AnchorLayout:
anchor_x: 'right'
canvas.before:
Color:
rgba: 0, 0, 1, 1
Rectangle:
pos: self.pos
size: self.size
Button:
id: f_but
width: 40
size_hint_x: None
答案 1 :(得分:0)
尝试size_hint_x: -0.5
而不是第3列元素中的width
属性。
使用GridLayout,您可以使用size_hint_x将col高度固定为特定大小。
应用更改:
test.kv
<AppCore>
GridLayout:
cols: 3
size: root.width * 0.8, root.height * 0.8
row_default_height: 30
row_force_default: True
center: root.width / 2, root.height / 2
Label:
text: 'hello world'
TextInput:
id: text_field
multiline: False
Button:
id: f_but
padding_right: 0
size_hint_x: -0.5
希望得到这个帮助。