所以我想在弹出窗口中显示一些长文本。如果 Popup 的高度可以随着文本的长度而改变,那将是理想的。但这不是我唯一的问题我已经尝试在不改变大小的情况下使用这段代码实现这个
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 使用标签的方式感到困惑。
最佳答案
document.bind(size=document.setter('text_size'))
将文本区域限制为特定大小,即小部件本身的大小。它工作得很好,除了你这样做的事实:
boxl.add_widget(boxl2)
这是一件好事,但你忘了设置 size_hint=(None, None)
以及 BoxLayout 的特定大小,因此:
另一方面,您将其设置为 Button
它们本身,这让您认为布局本身已更改。 (不是。)用例如修复它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
中实现它,这将使它变得高效。
关于python - Kivy Label 和 Popup + 长文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42676125/