如何将小部件维度传递给__init__

时间:2016-10-07 14:23:37

标签: kivy kivy-language

道歉,如果这个问题有明显的答案,但我现在已经找不到解决方案了。我的应用中的小部件有一个'图表'这是根据小部件的维度定义的。我可以动态更新图表'来自kv,因为我可以访问小部件的维度。但是,我想在启动时显示默认的“图表”,也就小部件的大小而言。我不知道如何将小部件的维度传递给__init__函数。这是我的例子:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.properties import ListProperty

Builder.load_string('''
#:kivy 1.9.2
<MainWidget>:
    BoxLayout:
        size_hint_x: 20
        orientation: 'vertical'
        ToggleButton:
            text: 'WF1'
            state: 'down'
            allow_no_selection: False
            on_press:
                root.line_points = [waveform.x, waveform.top, waveform.right, waveform.y]
                root.event_handler()
            group: 'lhs_buttons'
        ToggleButton:
            text: 'WF2'
            allow_no_selection: False
            on_press:
                root.line_points = [waveform.x, waveform.y, waveform.right, waveform.top]
                root.event_handler()
            group: 'lhs_buttons'
    BoxLayout:
        size_hint_x: 80
        Button:
            id: waveform
            canvas:
                Line:
                    points: root.line_points

''')

class MainWidget(BoxLayout):
    line_points = ListProperty()

    def __init__(self, **kwargs):
        super(MainWidget, self).__init__(**kwargs)
        #self.line_points =  [waveform.x, waveform.top, waveform.right, waveform.y]  

    def event_handler(self):
        print "event"

class MyApp(App):
    def build(self):
        return MainWidget()

if __name__ == '__main__':
    MyApp().run()

我想部分解决方案是在__init__中为其中一个按钮触发on_press事件,但我一直无法弄清楚如何做到这一点。我是Python和Kivy的新手。

1 个答案:

答案 0 :(得分:0)

一种方法是绑定line_points,如下所示:

<MainWidget>:
    line_points: self.calc_line_points(waveform.x, waveform.y, waveform.right, waveform.top)
    ...

calc_line_points 将被定义为:

    def calc_line_points(self, x, y, right, top):
        return [ x, top, right, y] #put more logic here ...