使用Kivy,我正在尝试编写一个显示情节和按钮的简单应用程序。我有以下代码,但问题是我无法在我的kv文件中控制图形的大小和位置。因此,我在左下角的Kivy默认位置有一个小图,如下所示。我确定我在这里做了些蠢事,但无法弄明白什么?如果有人能帮助我,我感激不尽。
以下是代码:
# 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)不能改变。
答案 0 :(得分:0)
您在__init__
的{{1}}中创建的布局位置Graph
和大小(0, 0)
,因为这些是默认值,没有任何内容可以告诉它去其他地方。当你添加(100, 100)
时,它也有这些参数,因为布局会让孩子自己填充。
立即解决方法是让您的self.plot
子类成为Graph
这样的布局,在这种情况下,其子项将自动放置以填充它。