使用pos_hint定位控件(例如Scatter)後,如何獲取當前的x,y位置(pos)?在應用pos_hint後獲取控件的XY位置
例如
wid.pos = (250, 350)
print wid.pos <----- # it print (200, 350). Correct.
wid.pos_hint = {'top':0.9, 'right':0.5} # moved the widget to other position using pos_hint.
print wid.pos <----- # it sill print (200, 350) eventhough the widget position has changed.
EDIT:例如代碼
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.scatter import Scatter
Builder.load_string("""
<[email protected]>:
size_hint: .06, .08
Image:
size: root.size
allow_stretch: True
keep_ratio: True
""")
class Icon(Scatter):
def __init__(self, **kwargs):
self.pos = (200, 200)
self.move()
super(Icon, self).__init__(**kwargs)
def move(self):
print "BEFORE: "
print self.pos # print 200, 200
self.pos_hint = {'top':0.9, 'right':0.5} # assume now Scatter has moved to x800 y500.
print "AFTER: "
print self.pos # it still print 200, 200 :(
class GameApp(App):
def build(self):
return Icon()
if __name__ == '__main__':
GameApp().run()
你似乎在做正確。你期待什麼樣的價值觀?考慮到當你使用'top'和'right'屬性時,Kivy將會使用'Scatter'的父項和** Scatter本身的''top'和'right'邊界** 。您可能期望您將定位分配給左下角,而您實際上是通過使用「頂」和「右」分配到右上角。 –
另外,根據我剛纔所說的,根據父母的情況,「大小」屬性非常重要。如果父類是一個簡單的'Widget','size'將會是100x100(默認),並且,例如,如果是FloatLayout,它可以與父類的尺寸相同(因爲默認值是'size_hint:1 ,1'),所以返回的定位將是'(0,0)'(在這種情況下不完全確定,甚至可能是負值) –
@toto_tico我之前的問題目前還不清楚。我編輯了代碼。在代碼的第3行中,我使用pos_hint移動了小部件(假設新小部件的位置現在爲x500 y600)。因此,在第4行,我實際上期待它打印位置(500,600),但它打印(250,350)。 – oneace