我在Kivy制作一个需要使用FileChooserListView小部件的简单应用。出于某种原因,每当我尝试使用小部件时,它只覆盖应用程序的左下角。我不能让它像它应该的那样填满整个屏幕。 以下是我的应用程序发生的情况:
main.py:
import kivy
kivy.require('1.8.0')
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
class AppRoot(BoxLayout):
img_picker = ObjectProperty(None)
def __init__(self, *args, **kwargs):
super(BoxLayout, self).__init__(*args, **kwargs)
self.img_picker = ImagePicker()
def change_to_img_picker(self):
self.clear_widgets()
self.add_widget(self.img_picker)
def change_to_about_us(self):
print "change_to_about_us"
class ImagePicker(BoxLayout):
def __init__(self, *args, **kwargs):
super(BoxLayout, self).__init__(*args, **kwargs)
def open(self, path, selection):
print "OPEN"
def selected(self, selection):
print "SELECTION"
class ImageApp(App):
def build(self):
return AppRoot()
if __name__ == "__main__":
ImageApp().run()
image.kv:
AppRoot:
<AppRoot>:
orientation: 'vertical'
padding: root.width * .02, root.height * .02
spacing: 10
Label:
text: "Some text should go here"
Button:
text: "Select Image"
size_hint_y: None
height: root.height * .1
on_release: root.change_to_img_picker()
Button:
text: "About the App"
size_hint_y: None
height: root.height * .1
on_release: root.change_to_about_us()
<ImagePicker>:
orientation: 'vertical'
id: img_picker
Button:
text: "open"
on_release: root.open(filechooser.path, filechooser.selection)
size_hint: 1, .2
FileChooserListView:
id: filechooser
on_selection: root.selected(filechooser.selection)
size_hint: 1, .8
change_to_img_picker()函数应该使用FileChooserListView替换当前窗口小部件并占用所有空间。我不确定为什么它不起作用。如果有人能告诉我为什么会这样,我将不胜感激。提前谢谢你:)
答案 0 :(得分:0)
super(BoxLayout, self).__init__(*args, **kwargs)
问题是你在BoxLayout上调用super,而不是你的ImagePicker类(第一个参数应该是当前类,而不是父类)。这会混淆通常在BoxLayout __init__
中创建的绑定(可能这不再被称为,你得到了BoxLayout的父代__init__
),所以没有正常的布局触发器,大小的变化等不会影响孩子。
我不完全确定某些细节(特别是,我对您的根小部件的布局似乎工作正常感到惊讶),但这似乎是问题的核心。