我想创建一些东西,当窗口的方向或大小改变时,可以改变它的总体布局。在下面的例子中,我试图用3个按钮来完成这个任务。但它失败了,并抱怨说,当我试图将按钮添加到布局中时,它们已经有了父级。为什么他们已经有父母了?我从来没有把它们添加到AdaptWidget中。。。 更重要的是,我应该如何实现我想实现的目标? 代码如下:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
class AdaptWidget(BoxLayoutWrite failed: Broken pipe
def __init__(self, **kw):
super(AdaptWidget, self).__init__(**kw)
self.but1 = Button(text='but1')
self.but2 = Button(text='but2')
self.but3 = Button(text='but3')
self.layout = None
def on_size(self, *args):
self.clear_widgets()
if self.size[0] > self.size[1]:
self.layout = BoxLayout(orientation='horizontal')
self.but1.size_hint = 0.7, 1
self.layout.add_widget(self.but1)
vert = BoxLayout(orientation='vertical')
self.layout.add_widget(vert)
self.but2.size_hint = (1,0.5)
self.but3.size_hint = (1,0.5)
vert.add_widget(self.but2)
vert.add_widget(self.but3)
else:
self.layout = BoxLayout(orientation='vertical')
self.but1.size_hint = 1, 0.7
self.layout.add_widget(self.but1)
horiz = BoxLayout(oreintation='horizontal')
self.layout.add_widget(horiz)
self.but2.size_hint = 0.5, 1
self.but3.size_hint = 0.5, 1
horiz.add_widget(self.but2)
horiz.add_widget(self.but3)
self.add_widget(self.layout)
class TestLayoutApp(App):
def build(self):
return AdaptWidget()
if __name__ == '__main__':
TestLayoutApp().run()
三天前,我写了这个“答案”,虽然我不能使上述建议起作用。在
但现在有人来了:https://groups.google.com/forum/#!topic/kivy-users/Z5fjt5tNys8 教我怎么做。在
所以解决方案来了:
请注意,上面的解决方案比原始代码干净得多。无需移除或清除任何小工具。你只要改变它们的属性。在
部分问题是buildozer.spec'-包含以下内容的文件:
^{pr2}$而不是这样:
每次你的}在第二次调用时总是崩溃。您可以始终确保从其父控件中删除小部件:
AdaptWidget
的大小改变,你的on_size
回调都会运行——但是回调不会从它们的父控件中删除任何小部件,因此{相关问题 更多 >
编程相关推荐