【发布时间】:2017-07-20 14:36:25
【问题描述】:
我想控制一个使用 KV 语言在 Kivy 中创建的简单 Ellipse 小部件。我已经阅读并完成了 Roberto Ulloa 和 Ben Rousch 在https://bradfortner.wordpress.com/2017/07/19/good-kivy-tutorial/ 的在线研讨会所著的 Kivy:Python 中的交互式应用程序一书中的练习。
虽然这些教程中提供的示例似乎在预定义的 Kivy 小部件(即按钮和标签)上运行良好,但我在控制我定义的小部件时遇到了问题,例如圆形椭圆,如下面的代码所示。
在代码(下面)中,我在第 10 行和第 45 行创建了圆形椭圆类 Widget(名为 Ball)。我将 Ball Widget 放在我的布局上(第 29 行),然后将 Widget 标识为 my_circle(第 30 行)。最后,我提供了将小部件链接到 Python 的代码(第 26 行),以便 Python 代码可以控制小部件。
但是,当我按下“Shrink Circle”按钮并调用 shrink_circle() 函数时,对小部件没有任何影响。知道代码哪里出错了吗?我很想知道,因为这对我来说变得很神秘,我找不到任何简单的东西来解释我需要做些什么来纠正这个问题。
完整代码如下。
提前表示感谢。
....布拉德....
# Modified from https://github.com/brousch/pyohio-kivy-tutorial/blob/master/tutorial/step11_tts/saythis.kv
import kivy
from kivy.lang import Builder
from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
kivy.require("1.9.1")
Builder.load_string('''
<Ball>:
size: 1, 1
canvas:
Color:
rgba: 1, 1, 1, 1
Ellipse:
pos: 350,290
size: 70,70
<ShrinkThis>:
button_font_size: '30sp'
canvas:
Color:
rgba: 0, 0, 0, 1
Rectangle:
pos: self.pos
size: self.size
my_circle: my_circle
BoxLayout:
orientation: 'horizontal'
Ball:
id: my_circle
Button:
text: 'Shrink Circle'
font_size: root.button_font_size
size_hint: 1, None
on_press: root.shrink_circle()
''')
class ShrinkThis(BoxLayout):
my_circle = ObjectProperty(None)
def shrink_circle(self):
self.my_circle.size = (10,10)
class Ball(Widget):
pass
class ShrinkThisApp(App):
def build(self):
return ShrinkThis()
if __name__ == '__main__':
ShrinkThisApp().run()
【问题讨论】:
标签: python-2.7 kivy kivy-language