gpt4 book ai didi

python - Kivy 标签左对齐和调整大小

转载 作者:行者123 更新时间:2023-12-01 02:47:29 24 4
gpt4 key购买 nike

我已经在这堵墙上奔跑了将近一天了。我感觉我已经尝试了一切。首先,这是我想要的以及我所看到的。

这就是我现在所拥有的:

enter image description here

我想要的是这样的:

enter image description here

在图像中,“CurrentHistory:\nHeader:”是单个标签。我可以让它左对齐,但我不能让它没有大量的顶部和底部填充。我喜欢标签是正方形的,而不是文本周围的矩形。我已经使用 Kivy 大约两天了,所以如果我错过了一些非常基本的东西,请原谅我。

编辑

我更新了一个功能齐全的演示。奇怪的是,.kv 生成的标签完全按照我想要的方式执行,但通过 python 生成的标签却没有。

SegmentLayout 与 .kv 文件中定义的 GridLayout 相同:(

整体布局是这样的:.kv

#:kivy 1.8.0

<MainWidget>
BoxLayout
size: root.size

ScrollView
id: scrlv
size_hint: .75, 1

GridLayout
cols: 1
size_hint: 1, None
height: max(self.minimum_height, scrlv.height)

canvas:
Color:
rgba: 150/255, 150/255, 150/255, 1
Rectangle:
pos: self.pos
size: self.size

SegmentLayout

GridLayout
cols: 1
size_hint: 1,None
height: self.minimum_height

Label
text: '[b]CurrentHistory:[/b]\nHeader:'
size_hint: (None, None)
halign: 'left'
markup: True
size: self.texture_size

TextInput
size_hint: (1,None)
height: self.minimum_height
text: 'Enter Text Here'

BoxLayout
orientation: "vertical"
size_hint: .25, 1

canvas:
Color:
rgba: 240/255, 180/255, 80/255, 1
Rectangle:
pos: self.pos
size: self.size

Label
text: "Label 1"
Label
text: "Label 2"

Python 驱动程序演示

import kivy

kivy.require('1.8.0') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.factory import Factory

from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput

class SegmentLayout(GridLayout):

def __init__(self, **kwargs):
super(SegmentLayout, self).__init__(cols=1, size_hint=(1,None), **kwargs)
self.bind(minimum_height=self.setter('height'))

label_text = '[b]CurrentHistory:[/b]\nHeader:'

label = Label(text=label_text, halign='left', size_hint=(None,None), markup=True)
label.bind(size=label.setter('texture_size'))
self.add_widget(label)

text_input = TextInput(text='Enter Text Here', size_hint=(1,None))
text_input.bind(minimum_height=text_input.setter('height'))
self.add_widget(text_input)

class MainWidget(Widget):
pass

class MyApp(App):

def build(self):
return MainWidget()

Factory.register('SegmentLayout', cls=SegmentLayout)

if __name__ == '__main__':
MyApp().run()

最佳答案

我找到了以下链接https://kivy.org/docs/api-kivy.uix.label.html#kivy.uix.label.Label.halign它警告不要使用 halign 属性。我的没有halign的解决方案如下:

            BoxLayout:
size_hint_y: None
height: sized_label.height
Label:
id: sized_label
text: "[b]CurrentHistory:[/b]\\nHeader:"
size_hint: (None, None)
markup: True
size: self.texture_size
Label:

我正在 BoxLayout 中放置一个带有文本的标签。我将尺寸高度设置为带有文本的标签的尺寸。带有文本的标签的大小与其文本的大小相同。由于带有文本的标签不像 BoxLayout 那么宽,我使用另一个标签来填充空白空间。

这是您更新的代码。我把它全部放在 .py 文件中,因为你在评论中说你正在为此苦苦挣扎。还有很多代码我删除了,因为它是重复的或不必要的。我希望现在你能更轻松地继续从事这方面的工作。我还为您的 TextInput 使用了诸如 text_hint 之类的东西。如果您不希望这样,应该很容易恢复这些更改...

这是我更新的代码:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.factory import Factory

from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput

from kivy.base import Builder

kv_string = Builder.load_string("""
BoxLayout:
BoxLayout:
canvas:
Color:
rgba: 150/255, 150/255, 150/255, 1
Rectangle:
pos: self.pos
size: self.size

ScrollView:
id: scrlv

GridLayout:
cols: 1
size_hint_y: None
height: max(self.minimum_height, scrlv.height)

BoxLayout:
size_hint_y: None
height: sized_label.height
Label:
id: sized_label
text: "[b]CurrentHistory:[/b]\\nHeader:"
size_hint: (None, None)
markup: True
size: self.texture_size
Label:

TextInput:
size_hint_y: None
height: 80
hint_text: 'Enter Text Here'
Label:

BoxLayout:
orientation: "vertical"
size_hint_x: .25

canvas:
Color:
rgba: 240/255, 180/255, 80/255, 1
Rectangle:
pos: self.pos
size: self.size

Label:
text: "Label 1"
Label:
text: "Label 2"
""")



class MyApp(App):

def build(self):
return kv_string



if __name__ == '__main__':
MyApp().run()

enter image description here

关于python - Kivy 标签左对齐和调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45134546/

24 4 0