Kivy(Python):无法使用从一个文件到另一个文件的类变量

2024-04-29 11:06:17 发布

您现在位置:Python中文网/ 问答频道 /正文

主文件:使用kivy filechooser,我选择了一个csv文件,抓取数据并转换成列表。(姓名和年龄) 子文件:我想使用主文件中定义的名称(x轴)和年龄(y轴)绘制图形

mainfile.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()

Im无法创建图形,因为子文件中的名称和年龄显示为未定义

请帮帮我


Tags: 文件csvpathfromimport名称agenames
1条回答
网友
1楼 · 发布于 2024-04-29 11:06:17

您的namesages仅定义为MyWidgetopen()方法范围内的局部变量。如果要公开它们以便在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()

相关问题 更多 >