python - Kivy(Python):无法使用从一个文件到另一个文件的类变量
问题描述
主文件:使用 kivy 文件选择器,我选择了一个 csv 文件,抓取数据并转换为列表。(名称和年龄)子文件:我想使用主文件中定义的名称(x 轴)和年龄(y 轴)绘制图形。
主文件.py:
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
import os
import csv
Builder.load_file('design2.kv')
class MyWidget(BoxLayout):
def open(self, path, filename):
with open(os.path.join(path, filename[0])) as f:
csv_data = csv.reader(f)
datalines = list(csv_data)
names = [i[0] for i in datalines]
age = [i[1] for i in datalines]
print(names)
print(age)
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
设计2.kv:
<MyWidget>:
id: my_widget
FileChooserListView:
id: filechooser
filters: ['*.csv']
on_selection: my_widget.open(filechooser.path, filechooser.selection)
子文件:
from mainfile import*
from matplotlib import pyplot as plt
plt.plot(names,age)
plt.show()
我无法创建图表,因为子文件名和年龄显示未定义。
请帮帮我
解决方案
您的names
andages
仅被定义为.open()
方法范围内的局部变量MyWidget
。如果您想公开它们以在open()
方法外使用,则必须在全局级别定义它们。所以,你可以修改你的mainfile.py
来做到这一点:
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
import os
import csv
# define names and ages to make them available for import
names = []
age = []
Builder.load_file('design2.kv')
class MyWidget(BoxLayout):
def open(self, path, filename):
global names, age
with open(os.path.join(path, filename[0])) as f:
csv_data = csv.reader(f)
datalines = list(csv_data)
names = [i[0] for i in datalines]
age = [i[1] for i in datalines]
print(names)
print(age)
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
此外,您需要subfile
稍微修改:
from matplotlib import pyplot as plt
import mainfile
mainfile.MyWidget().open('a', 'b') # set the values of names and age
print(mainfile.names, mainfile.age)
plt.plot(mainfile.names,mainfile.age)
plt.show()
推荐阅读
- ios - 如何将 MKMapItem 转换为二进制数据以存储在 Core Data 中?
- mysql - 预计增长率的价值
- json - 反序列化 Json 数组字典对
- function - 在 Powershell 中创建弹出消息
- android - 在android studio中,全屏活动和空活动有什么区别?
- modelica - 我是否在 OpenModelica 上正确合并了这个嵌套函数?
- php - 在php的输入标签值中显示数据库中的值
- jquery - HTML 无法理解页面上定义的 JSON 对象
- python - 由于'tornado.web'没有属性'异步',如何修复jupyter笔记本上的“500:内部服务器错误”?
- sequelize.js - Sequelize,关系和所需属性