在Kivy中移动小部件

时间:2018-05-03 22:12:12

标签: python kivy kivy-language

使用Kivy,我正在尝试编写一个显示情节和按钮的简单应用程序。我有以下代码,但问题是我无法在我的kv文件中控制图形的大小和位置。因此,我在左下角的Kivy默认位置有一个小图,如下所示。我确定我在这里做了些蠢事,但无法弄明白什么?如果有人能帮助我,我感激不尽。

enter image description here

以下是代码:

# Imports
import matplotlib
matplotlib.use('module://kivy.garden.matplotlib.backend_kivy')
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
import matplotlib.pyplot as plt
from kivy.app import App
from kivy.app import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
from kivy.core.window import Window

class Graph(Widget):
    def __init__(self, **kwargs):
        super(Graph, self).__init__(**kwargs)
        layout = FloatLayout()
        plt.plot([1, 2, 3], [1, 2, 3])
        figure = plt.gcf()
        self.plot = FigureCanvasKivyAgg(figure=figure)
        layout.add_widget(self.plot)
        self.add_widget(layout)


class Interface(FloatLayout):
    pass


class TestApp(App):

    def build(self):
        Window.clearcolor = (1, 1, 1, 1)
        return Interface()

if __name__ in ('__main__'):
    TestApp().run()

以下kv设置:

Interface:

<Interface>:
    padding: 10
    spacing: 10


    Button:
        text: "Open"
        size_hint_x: .15
        size_hint_y: .05
        pos_hint: {'x': 0.05, 'top': .55}

    Graph:
        size_hint_x: .5
        size_hint_y: .5
        pos_hint:{"x":0.5,"y":.5}

修改

将Graph更改为FloatLayout的子类,如下所示:

class Graph(FloatLayout):

def __init__(self, **kwargs):
    super(Graph, self).__init__(**kwargs)

    layout = FloatLayout()
    plt.plot([1, 2, 3], [1, 2, 3])
    figure = plt.gcf()
    self.plot = FigureCanvasKivyAgg(figure=figure)
    layout.add_widget(self.plot)
    self.add_widget(layout)

启用更改图形的大小(FloatLayout)。但是,图表的位置(FloatLayout)不能改变。

enter image description here

1 个答案:

答案 0 :(得分:0)

您在__init__的{​​{1}}中创建的布局位置Graph和大小(0, 0),因为这些是默认值,没有任何内容可以告诉它去其他地方。当你添加(100, 100)时,它也有这些参数,因为布局会让孩子自己填充。

立即解决方法是让您的self.plot子类成为Graph这样的布局,在这种情况下,其子项将自动放置以填充它。