Kivy 标签和弹出窗口 + 长文本
Posted
技术标签:
【中文标题】Kivy 标签和弹出窗口 + 长文本【英文标题】:Kivy Label and Popup + long text 【发布时间】:2017-07-29 07:17:25 【问题描述】:所以我试图在弹出窗口中显示一些长文本。如果弹出窗口的高度可以随文本长度而变化,那将是理想的。但这不是我唯一的问题,我试图在不使用此代码更改大小的情况下实现它
boxl = uix.boxlayout.BoxLayout(orientation="vertical")
boxl2 = uix.boxlayout.BoxLayout(orientation="horizontal")
pop = Popup(title="Title", content=boxl, size_hint=(0.75,0.8))
text = "Really long text"
document = uix.label.Label(text=text,markup=True, valign='top')
button = uix.button.Button(text='back', size_hint_y=None, height=40)
button2 = uix.button.Button(text="Button Title", size_hint_y=None, height=40)
button.bind(on_press=(lambda x:pop.dismiss()))
button2.bind(on_press=(lambda x,data=data:(self.set_vorteil(data),pop.dismiss())))
boxl.add_widget(document)
boxl2.add_widget(button)
boxl2.add_widget(button2)
boxl.add_widget(boxl2)
document.bind(size=document.setter('text_size'))
pop.open()
有趣的是,我的文本被截断了,即使按钮之前有很大的可用空间。我该如何解决这个问题,甚至使它正确?我对 Kivy 使用标签的方式感到困惑。
【问题讨论】:
切断是什么意思?使用类似的代码我得到this @ODiogoSilva 太短,请使用更长的文本。 您能否在示例中提供导致问题的字符串大小? 【参考方案1】:document.bind(size=document.setter('text_size'))
将文本区域限制为特定大小,即小部件本身的大小。它工作得很好,除了你这样做的事实:
boxl.add_widget(boxl2)
这是一件好事,但是您忘记设置 size_hint=(None, None)
和 BoxLayout 的特定大小,因此:
另一方面,您为Button
s 自己设置了它,这让您认为布局本身已更改。 (不是。)用例如修复它BoxLayout(size_hint=(None, None), size=<desired size>)
.
此外,这种方式并不是很好,因为它限制了用户,例如当移动布局太小时。我宁愿选择一个可滚动的标签:
from kivy.lang import Builder
from kivy.base import runTouchApp
runTouchApp(Builder.load_string('''
ScrollView:
Label:
size_hint_y: None
text_size: (self.width, None)
text: 'lorem ipsum dolor ' * 1000
height: self.texture_size[1]
'''))
或在RecycleView
中实现它,这将使其高效。
【讨论】:
【参考方案2】:Label
和 Button
小部件之间有这么多可用空间的原因是这两个 BoxLayout
小部件(boxl
和 boxl2
)实际上将空间分成两半(即使你没有注意到它)。如果您希望 Label
拥有所有空间,则需要设置 boxl2
小部件的高度:
boxl2 = BoxLayout(orientation="horizontal", size_hint_y=None, height=40)
这会将boxl2
小部件设置为与Button
小部件相同的高度
【讨论】:
【参考方案3】:如果有人感兴趣,这是我根据其中的文本增长的弹出窗口的实现:
<NotificationPopup@Popup>
height: content_id.height + 50
width: '400dp'
size_hint: (None, None)
BoxLayout:
orientation: 'vertical'
id: content_id
size_hint: (None, None)
height: self.minimum_height + 25
width: root.width - 25
Label:
size_hint_y: None
height: self.texture_size[1]
text_size: (self.width, None)
text: 'A' * 400
padding: (0, 10)
Button:
size_hint_y: None
height: '40dp'
text: 'ok'
通过更改文本长度来查看它是如何水平增长的 (text: 'A' * 400
)
您可以通过更改弹出窗口的宽度来更改弹出窗口的宽度。
【讨论】:
以上是关于Kivy 标签和弹出窗口 + 长文本的主要内容,如果未能解决你的问题,请参考以下文章