python - Kivy:使用滑块更新 matplotlib 画布
问题描述
我需要创建一个更新 matplotlib 图形的滑块。到目前为止,我有这个,main.py:
from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
import numpy as np
import matplotlib.pyplot as plt
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
class Container(BoxLayout):
display = ObjectProperty()
def __init__(self, *args, **kwargs):
global canvas
super(Container, self).__init__(**kwargs)
lum_img = np.random.rand(10,10)
plt.imshow(lum_img, cmap="gray")
plt.colorbar()
canvas = FigureCanvasKivyAgg(plt.gcf())
self.ids.box_display.add_widget(canvas)
canvas.draw()
def add_one(self, value):
lum_img = np.random.rand(10,10)
plt.imshow(lum_img, cmap="gray")
plt.colorbar()
canvas.draw()
self.display.text = str(round(value,2))
class MainApp(App):
def build(self):
self.title = 'Image and slider app'
return Container()
if __name__ == "__main__":
app = MainApp()
app.run()
和 main.kv:
<Container>:
display: display
id: main_display
orientation: "vertical"
BoxLayout:
id: box_display
orientation: "vertical"
Slider:
id: slider_image
min: 0
max: 1
value: 0.5
on_value: root.add_one(value = slider_image.value)
Label:
id: display
font_size: dp(50)
text: '0'
行为不像预期的那样,它只是移动它而不是更新图像画布!我认为错误是将画布声明为全局变量,但不这样做我不知道如何更新它。
任何想法?
解决方案
误解了你想要的(我的错误)。如果您不想创建新的绘图,而只是更新现有的绘图,则只需plt.clf()
在您的add_one()
方法中添加一个调用,然后再进行任何其他绘图。这将清除当前图形,并允许您将其替换为新图形。
推荐阅读
- r - 使用 R 将许多列收集在一起时出错
- couchdb - CouchDB 3.1 安装程序 - 未知发布者
- react-native - react-native-navigation 底部标签样式
- java - 求解二次方程的Java程序不起作用
- javascript - 如何将用户输入附加到数组中?
- sql - 计算字段的百分比
- ios - 无法在 iOS 上使用 react-native-image-picker
- reactjs - 如何在本地 React 项目中引用 Material UI 组件
- javascript - 在文档准备好的非活动选项卡内获取元素的高度?
- macos - 在 macOS 上更改 MySQL Workbench 深色主题结果网格颜色