我想使用size_hint
缩放小部件中的图像,但是不起作用。我做错了什么?
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.image import Image
class Game(Widget):
def __init__(self):
super().__init__(size=[1280, 960])
self.add_widget(Image(source='img.jpg', size_hint=(1, 1)))
class GameApp(App):
def build(self):
gm = Game()
return gm
GameApp().run()
结果,我看到一个带有100x100图像的黑色窗口。
答案 0 :(得分:0)
问题是您要将Image
添加到扩展Widget
的类中。 Widget
类不能用作容器,并且不能处理类似size_hint
的事情。因此,我建议更改Game
以扩展某种类型的容器,例如FloatLayout
。这是您所做的更改的代码:
class Game(FloatLayout):
def __init__(self):
super().__init__(size=[1280, 960])
self.add_widget(Image(source='img.jpg', size_hint=(1,1), allow_stretch=True))
您可能需要allow_stretch=True
来允许Image
拉伸源。
答案 1 :(得分:0)
为什么
size_hint
对小部件不起作用?
size_hint
不适用于
小部件。它应用于Image
对象。 The base class of Image
widget is a Widget。 The default size of a widget is (100, 100) and default size_hint is (1, 1)。因此,通过在实例化图像窗口小部件时提供size_hint=(1, 1)
,就不会更改默认的size_hint
或size
。size=[1280, 960]
时,您已经覆盖(100,100)的窗口小部件的默认size
或(1,1)的默认size_hint
< / li>
如果将pos=self.pos, size=self.size, allow_stretch=True)
添加到Image
,则会显示图像。
但是底部仍然有一条黑条。
self.add_widget(Image(source='Jupiter.png', pos=self.pos, size=self.size, allow_stretch=True))
您可以通过执行以下操作来替换Image
对象:
canvas
在Rectangle
中显示图像pos
和size
绑定到redraw
图像的方法上from kivy.graphics import Rectangle
from kivy.graphics import Rectangle
class Game(Widget):
def __init__(self):
super().__init__(size=[1280, 960])
with self.canvas:
self.rect = Rectangle(source="Jupiter.png", pos=self.pos, size=self.size)
self.bind(pos=self.redraw, size=self.redraw)
def redraw(self, *args):
self.rect.size = self.size
self.rect.pos = self.pos