我正在尝试制作具有2个屏幕的APP:
按下第一个屏幕的按钮时,第二个屏幕将显示图形。 我只能使用matplotlib在1个屏幕上绘制图形。
这是我的代码:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use("module://kivy.garden.matplotlib.backend_kivy")
from kivy.garden.matplotlib import FigureCanvasKivyAgg
from kivy.uix.widget import Widget
class Sensores(Screen):
pass
class Grafico(Screen):
def build(self):
box = BoxLayout()
box.add_widget(FigureCanvasKivyAgg(plt.gcf()))
return box
class Menu(ScreenManager):
pass
presentation = Builder.load_file('sensor.kv')
class sensor(App):
def build(self):
return presentation
if __name__ == "__main__":
sensor().run()
KIVY
Menu:
Sensores:
Grafico:
<Sensores>
name: 'sensores'
BoxLayout:
Button:
text: "Sensor 01"
on_release:
root.Grafico()
<Grafico>
name: 'grafico'
我希望在第二个屏幕中显示图形。
答案 0 :(得分:0)
我发现您的代码有两个问题。首先,在您的kv
文件中,Button
操作不正确:
Button:
text: "Sensor 01"
on_release:
root.Grafico()
如果打算将Button
切换到另一个屏幕,则应该为:
Button:
text: "Sensor 01"
on_release:
root.manager.current='grafico'
第二,在您的Grafico
类中,您有一个从未调用过的build()
方法。如果您将其更改为:
class Grafico(Screen):
def build(self):
box = BoxLayout()
box.add_widget(FigureCanvasKivyAgg(plt.gcf()))
return box
至:
class Grafico(Screen):
def on_enter(self, *args):
box = BoxLayout()
box.add_widget(FigureCanvasKivyAgg(plt.gcf()))
self.add_widget(box)
我想您会得到理想的结果。关键是在显示on_enter()
Grafico
时调用Screen
方法。该方法是您的代码,但是添加了self.add_widget(box)
以便将box
添加到屏幕上。有关更多信息,请参见Screen Documentation。
答案 1 :(得分:0)
非常感谢! 现在可以使用!请遵循代码:
const users = [{
"id": 1,
"first_name": "Abner",
"last_name": "Glaisner",
"gender": "Male",
"language": "Tswana"
},
{
//...
}]
class UserList {
constructor(users) {
this.users = users;
}
showNames() {
users.forEach(function (user) {
console.log(user);
return this;
})
}
showById(id) {
users.forEach(function (user) {
if (id === user.id) {
console.log(user.first_name);
} else {
console.log(`Unable to find user id: ${id}`);
}
})
}
}