python - 如何在其他屏幕kivy中显示情节
问题描述
单击第一个屏幕中的按钮后,我尝试在第二个屏幕中显示绘图。这是我尝试过的代码。从 kivy.app 导入 kivy 从 kivy.uix.label 导入 App 从 kivy.uix.gridlayout 导入标签 从 kivy.uix.textinput 导入 GridLayout 从 kivy.uix.button 导入 TextInput 从 kivy.uix.boxlayout 导入按钮 从 kivy 导入 BoxLayout .properties import ObjectProperty from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg from kivy.uix.widget import Widget from pandas import read_excel import matplotlib.pyplot as plt
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"
但我得到错误说'super' object has no attribute '__getattr__'
,我不知道这意味着什么。请帮我。
解决方案
问题是您正在尝试使用id
在不同的Screen
. destination
定义在 中SecondWindow
,所以对此MainWindow
一无所知。因此,您可以id
通过以下方式引用它SecondWindow
:
class MainWindow(Screen):
def btn(self):
print("name: ",self.name2.text)
self.manager.get_screen('second').ids.destination.add_widget(FigureCanvasKivyAgg(plt.gcf()))
推荐阅读
- excel - 在vba字典A1:D8中存储行并检查A列中的单元格值是否与K列中的唯一键匹配,如果匹配则粘贴
- java - 删除 SOAP 请求命名空间前缀
- ionic-framework - 离子简单地图,没有谷歌
- user-interface - 自定义网格布局行大小
- typescript - 什么 AsyncGenerator TypeScript 类型会产生 Promise?
- c++ - 为什么使用 MSVC 编译器编译 zlib 可以正常工作,但使用 Cygwin 时会出现语法错误?
- c++ - 为什么'[[fallthrough]]'需要方括号'[[]]'?
- reactjs - 反应原生屏幕之间的导航
- angular - Angular mat-table 在每一行中显示动态键值对
- database - 如何有效地等待 RDBS (PostgreSQL) 表中的数据可用?