我尝试的是一个更大的应用程序的一部分,但我在这里发布了理解我的问题的最低限度:
我想更改矩形的大小,该大小取决于 root.height 。
3个案例:
1)当我创建一个高度为“root.height/4”的矩形时,大小会随着我调整根窗口的大小而变化。目前为止没有问题
2)当我尝试将“root.height/4”分配给属性并在设置矩形大小时调用此属性时,出现以下错误:“TypeError:需要浮点数”。
Python 文件:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle, Color
class BriqueApp(App):
def build(self):
return BriqueGUI()
class BriqueGUI(Widget):
pass
BriqueApp().run()
Run Code Online (Sandbox Code Playgroud)
Kv文件:
#:kivy 1.9.1
<BriqueGUI>:
h: root.height/4
color: (1,0,0,1)
canvas:
Color:
rgba: root.color
Rectangle:
size: (200, self.h)
pos: (0,0)
Run Code Online (Sandbox Code Playgroud)
3)当我尝试重新分配一个值时,例如“root.height/2”,当调用事件时(此处为on_touch_down):我的矩形的大小发生变化,但是当我调整窗口大小时,我的矩形不会调整大小用它。您可以在此处看到加载文件、单击主窗口并更改其大小的问题。
Python 文件:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle, Color
class BriqueApp(App):
def build(self):
return BriqueGUI()
class BriqueGUI(Widget):
def on_touch_down(self, touch):
self.h = self.height/2
BriqueApp().run()
Run Code Online (Sandbox Code Playgroud)
Kv文件:
#:kivy 1.9.1
<BriqueGUI>:
h: 20
color: (1,0,0,1)
canvas:
Color:
rgba: root.color
Rectangle:
size: (200, self.h)
pos: (0,0)
Run Code Online (Sandbox Code Playgroud)
2) 您还必须在 Python 代码中创建属性:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle, Color
from kivy.properties import NumericProperty
from kivy.lang import Builder
Builder.load_string("""
<BriqueGUI>:
h: root.height/4
color: (1,0,0,1)
canvas:
Color:
rgba: root.color
Rectangle:
size: (200, self.h)
pos: (0,0)
""")
class BriqueApp(App):
def build(self):
return BriqueGUI()
class BriqueGUI(Widget):
h = NumericProperty(0.0)
BriqueApp().run()
Run Code Online (Sandbox Code Playgroud)
3) 您只为您的属性分配一次值h
。您需要的是bind
允许您关联回调的方法,该回调将在属性更改时调用:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle, Color
from kivy.properties import NumericProperty
from kivy.lang import Builder
Builder.load_string("""
<BriqueGUI>:
h: 20
color: (1,0,0,1)
canvas:
Color:
rgba: root.color
Rectangle:
size: (200, self.h)
pos: (0,0)
""")
class BriqueApp(App):
def build(self):
return BriqueGUI()
class BriqueGUI(Widget):
def on_touch_down(self, touch):
self.h = self.height/2
self.bind(height=self.set_h)
def set_h(self, instance, value):
self.h = value/2
BriqueApp().run()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2584 次 |
最近记录: |