kivy - 画布坐标系的问题(全局与本地)

时间:2014-10-21 08:52:09

标签: python canvas kivy

我的kv文件的一部分如下所示,我想在ShowRectangle的画布上画线。

但是,我遇到了以下问题。

小部件" ParentOfShowRectangle"将BoxLayout的高85%提供给" ShowRectangle",将低15%提供给某些按钮。

" ShowRectangle" Scatter of" ShowRectangle"适当地渲染到上限85%。但是,canvas.after中的Lines不会在屏幕的上部85%内绘制,而是与较低的15%(按钮)相交。即使这样,它们也具有正确的长度等(按比例缩放85%)。

看起来,天气只是错过了坐标系的适当偏移15%。 错误选择的坐标系可能会出现问题吗? 我无法弄清楚原因。

ShowRectangle继承自BoxLayout。 ParentOfShowRectangle继承自Screen。


kv文件

<ShowRectangle>:
    canvas.after:
        Line:
            width: 3
            points: self.size[0] * 0.05, self.size[1] * 0.05, self.size[0] * 0.05, self.size[1] * 0.95, self.size[0] * 0.95, self.size[1] * 0.95, self.size[0] * 0.95, self.size[1] * 0.05
            close: True
    Scatter:
        pos: self.pos
        size: self.size
        size_hint: 1, 1

<ParentOfShowRectangle>:
    BoxLayout:
        orientation: 'vertical'
        ShowRectangle:
            size_hint: 1, 0.85
            size: 1, 0.85
        BoxLayout:
            orientation: 'horizontal'
            size_hint: 1, 0.15
            height: 1, 0.15
            Button:
                text: 'Cancel.'
                font_size: root.button_font_size
                size_hint: 1, 0.6
                height: ...
            Button:
                text: 'Ok.'
                font_size: root.button_font_size
                size_hint: 1, 0.6
                height: ...

1 个答案:

答案 0 :(得分:0)

找到使用self.center进行相对定位的解决方案:

self.center[0]-self.size[0] * 0.45, self.center[1]-self.size[1] * 0.45, \
self.center[0]+self.size[0] * 0.45, self.center[1]-self.size[1] * 0.45, \
self.center[0]+self.size[0] * 0.45, self.center[1]+self.size[1] * 0.45, \
self.center[0]-self.size[0] * 0.45, self.center[1]+self.size[1] * 0.45