[英]Kivy. Why size_hint doesn't work at widget?
我想使用size_hint
在Widget中縮放圖像,但是它不起作用。 我做錯了什么?
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圖像的黑色窗口。
問題是您要將Image
添加到擴展Widget
的類中。 Widget
類不能用作容器,並且不能處理諸如size_hint
類的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
拉伸源。
為什么
size_hint
不適用於Widget?
size_hint
用於size_hint
小部件。 它應用於Image
對象。 Image
小部件的基類是Widget 。 小部件的默認大小為(100,100),默認size_hint為(1,1) 。 因此,通過在實例化圖像窗口小部件時提供size_hint=(1, 1)
,就不會更改默認的size_hint
或size
。 size=[1280, 960]
,您已經覆蓋了小部件的默認size
(100,100)或默認的size_hint
(1,1) 如果將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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.