Я хочу создать экран, на котором при следующих нажатиях кнопок происходит изменение размера и положения этикетки:
Button : Changes
x++ -> x co-ordinate of label increments by 0.1 in pos_hint property
x-- -> x co-ordinate of label decrements by 0.1 in pos_hint property
До сих пор я пробовал это,
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.scatter import Scatter
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty
class Screen(Widget):
lbl = ObjectProperty(None)
def __init__(self, **kwargs):
super(Screen, self).__init__(**kwargs)
self.count_x = 0.1
def print_pos_change(self,instance,value):
print(instance,"Moved to", value)
def callback(self,arg):
if arg == "x++":
self.count_x+=0.1
self.lbl.pos_hint["x"] = self.count_x
elif arg == "x--":
self.count_x-=0.1
self.lbl.pos_hint["x"] = self.count_x
class WidgetEx(App):
kv_directory = "kv-files"
def build(self):
return Screen()
if __name__ == "__main__":
WidgetEx().run()
Вотkv file,
<Screen>
lbl:lbl
FloatLayout:
size:root.width,root.height
Label:
id:lbl
text:"Hello"
size_hint:0.5,0.5
on_pos:root.print_pos_change(self,self.pos)
canvas:
Color:
rgba: 0, 0, 1, 1
Rectangle:
pos:self.pos
size:self.size
GridLayout:
cols:2
size_hint:1,0.1
Button:
text:"x++"
on_press:root.callback("x++")
Button:
text:"x--"
on_press:root.callback("x--")
Теперь проблема в том, что ни позиция не меняется, ни print_pos_change
вызывается во время изменения.
Я знаю, что могу напрямую использовать self.lbl.x
и self.lbl.y
, ноя хочу изменить его, используя self.lbl.pos_hint
. Как мне это сделать?
Вот сс интерфейса пользователя,
Я использовал do_layout()
для floatlayout
в конце метода callback
, но кнопкитакже теперь перемещается с метками ?? Как это исправить?
Почему size_hint работает правильно, а pos_hint нет? Есть ли за этим логика?
Я хочу увеличить pos_hint["x"]
свойство увеличивать на 0,1 при каждом нажатии кнопки x++
.