Python 如何在其他屏幕中显示绘图kivy
单击第一个屏幕上的按钮后,我试图在第二个屏幕上显示绘图。 这是我试过的代码。 进口克维 从kivy.app导入应用程序 从kivy.uix.label导入标签 从kivy.uix.gridlayout导入gridlayout 从kivy.uix.textinput导入textinput 从kivy.uix.button导入按钮 从kivy.uix.boxlayout导入boxlayout 从kivy.properties导入ObjectProperty 从kivy.lang导入生成器 从kivy.uix.screenmanager导入screenmanager,屏幕 从kivy.garden.matplotlib.backend_kivyagg导入图Canvaskivyagg 从kivy.uix.widget导入widget 从pandas导入读取excel 将matplotlib.pyplot作为plt导入Python 如何在其他屏幕中显示绘图kivy,python,kivy,kivy-language,Python,Kivy,Kivy Language,单击第一个屏幕上的按钮后,我试图在第二个屏幕上显示绘图。 这是我试过的代码。 进口克维 从kivy.app导入应用程序 从kivy.uix.label导入标签 从kivy.uix.gridlayout导入gridlayout 从kivy.uix.textinput导入textinput 从kivy.uix.button导入按钮 从kivy.uix.boxlayout导入boxlayout 从kivy.properties导入ObjectProperty 从kivy.lang导入生成器 从kivy
plt.plot([1, 23, 2, 4])
plt.ylabel('some numbers')
class MainWindow(Screen):
def btn(self):
print("name: ",self.name2.text)
self.ids.destination.add_widget(FigureCanvasKivyAgg(plt.gcf()))
class SecondWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
kv = Builder.load_file("my.kv")
class MyMainApp(App):
def build(self):
return kv
if __name__=="__main__":
MyMainApp().run()
#:kivy 1.9.1
WindowManager:
MainWindow:
SecondWindow:
<MainWindow>:
name: "main"
name2: name2
GridLayout:
cols:1
size: root.width, root.height
GridLayout:
cols:2
Label:
text:"name: "
TextInput:
id: name
multinline:False
Label:
text:"name2: "
TextInput:
id: name2
multinline:False
Button:
text:"Submit"
on_release:
root.btn()
app.root.current = "second"
root.manager.transition.direction = "left"
<SecondWindow>:
name: "second"
GridLayout:
cols:1
BoxLayout:
id: destination
Button:
text: "Go Back"
on_release:
app.root.current = "main"
root.manager.transition.direction = "right"
plt.plot([1,23,2,4])
plt.ylabel('一些数字')
类主窗口(屏幕):
def btn(自身):
打印(“名称:”,self.name2.text)
self.ids.destination.add_小部件(图canvaskivyagg(plt.gcf())
第二类窗口(屏幕):
通过
类WindowManager(屏幕管理器):
通过
kv=Builder.load_文件(“my.kv”)
类MyMainApp(应用程序):
def生成(自):
回流千伏
如果名称=“\uuuuu main\uuuuuuuu”:
MyMainApp().run()
#:kivy 1.9.1
WindowManager:
主窗口:
第二窗口:
:
名称:“主要”
名称2:名称2
网格布局:
科尔斯:1
尺寸:根.宽度,根.高度
网格布局:
科尔斯:2
标签:
文本:“名称:”
文本输入:
id:姓名
多行:错误
标签:
文本:“名称2:”
文本输入:
id:姓名2
多行:错误
按钮:
案文:“提交”
发布时:
root.btn()
app.root.current=“秒”
root.manager.transition.direction=“左”
:
姓名:“第二”
网格布局:
科尔斯:1
盒子布局:
id:目的地
按钮:
文本:“返回”
发布时:
app.root.current=“main”
root.manager.transition.direction=“右”
但我得到的错误是,
“super”对象没有属性“\uu getattr\uuu”
,我不知道这是什么意思。请帮助我。问题是您试图使用在不同的屏幕中定义的id
。destination
是在SecondWindow
中定义的,因此main window
对其一无所知。因此,您可以通过如下方式通过SecondWindow
引用该id
:
class MainWindow(Screen):
def btn(self):
print("name: ",self.name2.text)
self.manager.get_screen('second').ids.destination.add_widget(FigureCanvasKivyAgg(plt.gcf()))