【发布时间】:2019-10-31 05:16:33
【问题描述】:
我想构建一个屏幕,在按下按钮后,标签的大小和位置会发生变化:
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文件,
<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 更改它。我该怎么做???
这是 UI 的 ss,
我在方法callback 的末尾使用do_layout() 代替floatlayout,但是按钮现在也随着标签移动?我该如何解决这个问题?
为什么 size_hint 工作正常而 pos_hint 不工作??这背后有什么逻辑吗?
我想在每次按下 x++ 按钮时增加 pos_hint["x"] 属性以增加 0.1。
【问题讨论】:
-
你能做一个你能想到的最小的可运行示例吗?只有一个按钮和一个标签,只能在一个方向移动。只有主要问题是必要的。不是整个程序,因为它无关紧要,只是需要查看更多代码和图像,这不包含您的主要问题。只是提供更快帮助的建议。
-
@el3ien 我已将其减少为 2 个与
pos_hint相关的按钮
标签: python widget kivy kivy-language