簡體   English   中英

為什么這個矩形不以Kivy為中心?

[英]Why isn't this rectangle centered in Kivy?

我正在嘗試在小部件的中心繪制一個矩形:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle


class MyWidget(Widget):
    def __init__(self):
        super(MyWidget, self).__init__()
        with self.canvas:
            Rectangle(pos=(self.center_x, self.center_y)


class MyApp(App):
    def build(self):
        return MyWidget()


if __name__ == '__main__':
    MyApp().run()

這就是我得到的:

確實是形象

使用.kv文件執行完全相同的操作是.kv

<MyWidget>:
    canvas:
        Rectangle:
            pos: self.center_x, self.center_y

請說明如何實現我要執行的操作,以及為什么使用.kv文件而不是Python代碼可以正常工作。 謝謝

如果從kv文件添加窗口小部件,則該窗口小部件將自動附加到應用程序的root屬性,並用作應用程序窗口小部件樹的基礎。 因此,根據您的情況,從kv文件中,窗口小部件的大小會自動綁定到應用程序窗口的大小,並成為根窗口小部件。 考慮到這一點,self.center_x和self.center_y起作用。 您可以在https://kivy.org/docs/guide/lang.html MyApp-> my.kv行下閱讀此內容。

如果不使用kv文件,則不會發生這種情況,小部件的默認大小為(100,100)。 要正確放置矩形,請使用布局,以便您可以參考使用size_hint正確放置或調整任何子窗口小部件的大小。 如文檔中所述

FloatLayout繼承其子級的pos_hint和size_hint屬性。

https://kivy.org/docs/api-kivy.uix.floatlayout.html#kivy.uix.floatlayout.FloatLayout

因此,在示例中創建一個Float布局,添加一個pos_hint等於center_x和center_y的小部件,它將以該布局為父級,然后在該小部件上繪制一個矩形。

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics import Rectangle
from kivy.core.window import Window

class myLayout(FloatLayout):
    def __init__(self):
        super(myLayout, self).__init__()
        self.size = Window.size
        self.myWidget = Widget(size=(100,100))
        self.add_widget(self.myWidget)
        with self.myWidget.canvas:
            Rectangle(pos=(self.center_x, self.center_y))


class MyApp(App):
    def build(self):
        return myLayout()


if __name__ == '__main__':
     MyApp().run()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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