如何在Kivy中以弹窗加载图像
def pop1(self):
pop = Popup(title='test',content=Image('boy.png'),
size_hint=(None,None))
pop.open()
然后在kv语言中,我尝试从按钮的按下事件中调用它。kv文件的代码是这样的。
BoxLayout:
size:self.parent.size
orientation:'horizontal'
spacing:10
padding:5
Button:
text:
size_hint:.3,.3
on_press:
root.pop1()
当我尝试运行它时,出现了如下错误:
: _container: container GridLayout: padding: 12 keyError: 'pos_hint'
1 个回答
6
首先,你调用了 root.pop1()
,而这里的 root
是一个 BoxLayout
,我猜想你是在一个叫 BoxLayout
的类里定义了你的 pop1
函数,并且这个类是从 BoxLayout
继承来的?如果是这样的话,你实际上是在覆盖一个 kivy 的类,这样会导致一些问题。
第二个问题是,你调用了 Image('boy.png')
,其实应该是 Image(source='boy.png')
。
最后,在按钮的设置中,你忘记给 text
赋值了。
要更好地实现你想要的功能,可以使用以下代码:
from kivy.app import runTouchApp
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.uix.image import Image
from kivy.lang import Builder
kv = '''
BoxLayoutWithPopup:
orientation:'horizontal'
spacing:10
padding:5
Button:
text: 'Press me'
size_hint:.3,.3
on_press:
root.pop1()
'''
class BoxLayoutWithPopup(BoxLayout):
def pop1(self):
pop = Popup(title='test', content=Image(source='boy.png'),
size_hint=(None, None), size=(400, 400))
pop.open()
if __name__ == '__main__':
runTouchApp(Builder.load_string(kv))