簡體   English   中英

基維 為什么size_hint在小部件上不起作用?

[英]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?

回答

  1. 您提供的關鍵字size_hint用於size_hint小部件。 它應用於Image對象。 Image小部件的基類是Widget 小部件的默認大小為(100,100),默認size_hint為(1,1) 因此,通過在實例化圖像窗口小部件時提供size_hint=(1, 1) ,就不會更改默認的size_hintsize
  2. 當您向超級構造函數提供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對象:

  1. 使用小部件的canvasRectangle顯示圖像
  2. 將小部件的possize綁定到redraw圖像的方法
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM