python - 为什么更改 pos_hint 属性不会在运行时更改小部件的位置?
问题描述
我正在创建 on_press 移动另一个按钮的按钮。这是它的看法...
我不能发布图片,但我已经给出了链接
我正在更改pos_hint
按钮事件的属性,但小部件没有根据它移动。实际上它甚至没有移动一个像素:) 是的,我知道我可以更改widget.x
属性widget.y
来移动小部件,但我想知道是否可以使用它来更改它pos_hint
编辑:我正在使用 python 3.x 和 debain OS
我尝试分配button.pos_hint
给字典,然后更改它并再次分配给button.pos_hint
这就是我要说的
new_dict = some_button.pos_hint
#changing new_dict here...
some_button.pos_hint = new_dict
main.py-->
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.properties import ObjectProperty
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import DictProperty
class Login2(FloatLayout):
btn_demo = ObjectProperty(None)
def just(self, arg):
if arg == "x++":
print(self.btn_demo.pos_hint)
if "x" in self.btn_demo.pos_hint.keys():
self.btn_demo.pos_hint["x"] += 0.1
else:
self.btn_demo.pos_hint["x"] = 0
elif arg == "top--":
print(self.btn_demo.pos_hint)
if "top" in self.btn_demo.pos_hint.keys():
self.btn_demo.pos_hint["top"] -= 0.1
else:
self.btn_demo.pos_hint["top"] = 0
class MainApp(App):
def build(self):
return Login2()
if __name__ == "__main__":
MainApp().run()
kv 文件-->
<Login2>
btn_demo:btn_demo
GridLayout:
cols:1
size: root.width,root.height
FloatLayout:
Button:
pos_hint:{"top":1,"x":0.3}
size_hint:0.2,0.2
id:btn_demo
text:"Demo"
GridLayout:
size_hint: 1,0.2
cols:6
Button:
text:"x++"
on_press:root.just("x++")
Button:
text:"x--"
on_press:root.just("x--")
Button:
text:"y++"
on_press:root.just("y++")
Button:
text:"y--"
on_press:root.just("y--")
Button:
text:"top++"
on_press:root.just("top++")
Button:
text:"top--"
on_press:root.just("top--")
Button:
text:"bot++"
on_press:root.just("bot++")
Button:
text:"bot--"
on_press:root.just("bot--")
Button:
text:"rgt++"
on_press:root.just("rgt++")
Button:
text:"rgt--"
on_press:root.just("rgt--")
Button:
text:"lef++"
on_press:root.just("lef++")
Button:
text:"lef--"
on_press:root.just("lef--")
我如何使用pos_hint
更改按钮小部件的位置???
解决方案 ::::> 调用 layout_instance.do_layout() 以使更改出现在屏幕上......就像这样:
#change co-ordinates you want on widget_instance
#then call widget_instance's parent layout's do_layout() method
解决方案
您应该使用"right"
而不是"x"
inpos_hint
这个例子有效:
from kivy.app import App
from kivy.lang import Builder
KV = """
FloatLayout:
Button:
text: "hello"
id: hello
size_hint: 0.1, 0.1
pos_hint: {"top":0.3, "right": 0.5}
on_release:
world.pos_hint = {"top":0.1, "right": 0.1}
Button:
id: world
text: "world"
size_hint: 0.1, 0.1
pos_hint: {"top":0.5, "right": 0.9}
on_release:
world.pos_hint = {"top":0.9, "right": 0.9}
"""
class MyApp(App):
def build(self):
return Builder.load_string(KV)
MyApp().run()
推荐阅读
- jenkins-pipeline - 如何在 Cygwin 的 Jenkins 控制台上显示 bash 脚本执行
- oracle - PL/SQL:在创建表之前检查模式中是否有足够的空间
- javascript - S3 Bucket,使用 axios 将图像放入预签名的 url
- node.js - 部署后 Socket.io 不工作 - 抛出错误 - 405(不允许)
- javascript - 如何使用 JavaScript 设置 p:selectBooleanCheckbox 的值
- rest - 添加 Powershell 作业以从分页的 rest API 中并行检索
- python - 我们如何在将 ModelForm 实例作为响应发送到模板之前更改它?
- regex - 带有 Google 表格的正则表达式,使用分隔符匹配项目
- c++ - 根据可调用的签名自动选择一元与二进制 std::transform 函数重载
- swift - socket.emit 每次不在同一个屏幕时调用