【发布时间】:2018-11-05 04:00:14
【问题描述】:
我希望在 python 端制作一个具有动态高度的弹出窗口。
到目前为止,我在屏幕__init__ 类中有这个。 kv 文件有另一个称为弹出 on_release 的小部件。无论如何,我发现这会产生一个格式非常奇怪的弹出窗口:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import Screen, ScreenManager
kv = '''
ScreenManagement:
id: 'manager'
BrokenPopup:
name: 'broken'
manager: 'manager'
<BrokenPopup>:
BoxLayout:
Button:
text: 'Test'
on_release: root.p.open()
'''
class ScreenManagement(ScreenManager):
pass
class BrokenPopup(Screen):
def __init__(self, **kwargs):
super(BrokenPopup,self).__init__(**kwargs)
self.p = Popup(auto_dismiss=False, size_hint_x=.6, size_hint_y=None, title='A popup')
self.g = GridLayout(cols=1, spacing=10)
self.g.add_widget(Button(text='Test1', size_hint_y=None, height=32))
self.g.add_widget(Button(text='Test2', size_hint_y=None, height=32))
self.g.bind(minimum_height=self.g.setter('height'))
self.p.add_widget(self.g)
self.p.bind(height=self.g.setter('height')) #<- this does not work to change the popup height!
class TheApp(App):
def build(self):
return Builder.load_string(kv)
TheApp().run()
弹出框大小设置为仅适合一个小部件,而使第二个按钮(以及可能包含的所有其他按钮)浮动超出弹出框边框的范围。
我应该如何更改代码以使所有小部件都适合弹出窗口的范围?我正在尝试通过动态设置弹出窗口的高度来做到这一点,但事实证明这并不有效。
【问题讨论】:
-
不确定“不起作用”是什么意思,请更具体。但我看到的一件事是
self.p一次只能引用一个Popup,那么您目前如何尝试创建第二个Popup。请提供MCVE。 -
@JohnAnderson,我已将问题更新为更具体。本质上,小部件浮动在弹出窗口的边界之外。我想设置弹出窗口的高度,使其适合其中的小部件,并且我想动态地执行此操作,以防其他小部件添加到弹出窗口中。