所以我试图在Popup中显示一些长文本。如果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使用标签的方式感到困惑。
答案 0 :(得分:3)
document.bind(size=document.setter('text_size'))
将文本区域限制为特定大小,即小部件本身的大小。除了事实,你做得很好:
boxl.add_widget(boxl2)
这是一件好事,但是您忘记为BoxLayout设置size_hint=(None, None)
和特定尺寸,因此:
另一方面,您为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
中的实施,这将使其有效。
答案 1 :(得分:3)
您在Label
和Button
小部件之间获得如此多可用空间的原因是两个BoxLayout
小部件(boxl
和boxl2
)实际上是将空间分成两半(即使你没有注意到它)。如果您希望Label
拥有所有空间,则需要设置boxl2
窗口小部件的高度:
boxl2 = BoxLayout(orientation="horizontal", size_hint_y=None, height=40)
这会将boxl2
窗口小部件设置为与Button
窗口小部件相同的高度
答案 2 :(得分:0)
如果有人有兴趣,这是我根据其中的文字增长的弹出窗口的实现:
<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
)