如何正确运行Kivy和XLRD模块

时间:2017-01-03 19:46:22

标签: python excel kivy xlrd

我正在尝试使用xlrd模块在Kivy中创建一个非常简单的应用程序。我有一个包含一些数据的excel电子表格,我想将单元格(2,1)显示为标签。到目前为止,这是我的代码:

import kivy
kivy.require('1.9.1')
import xlrd
from kivy.app import App
from kivy.uix.label import Label


class MyApp(App):
    workbook = xlrd.open_workbook('Actuarial program for BAM.xlsx')
    sheet = workbook.sheet_by_index(0)

    def build(self):
        return Label(text='sheet.cell_value(2,1)')


if __name__ == '__main__':
    MyApp().run()

首先我明白标签只会给我文字文件sheet.cell_value(2,1)。我的问题在于工作簿和工作表变量。如果我尝试运行该程序没有任何反应。但是,如果我将两行注释掉('workbook ='和'sheet ='),那么程序将运行,从文件中打开一个带有文本sheet.cell_value(2,1)的窗口。我格式化代码的方式有问题吗?

此外,excel文件与.py程序位于同一目录中。

1 个答案:

答案 0 :(得分:0)

Label(text='sheet.cell_value(2,1)')字面上显示sheet.cell_value(2,1),因为它被引用。 您必须取消引用它,并且由于sheet是类成员,因此您必须在selfMyApp前加上前缀。我会使用self前缀例如:

class MyApp(App):
    workbook = xlrd.open_workbook('Actuarial program for BAM.xlsx')
    sheet = workbook.sheet_by_index(0)

    def build(self):
        return  Label(text=self.sheet.cell_value(2,1))

如果xlsx文件与我推荐的程序位于同一目录中(并且会捕获异常并显示它们):

    # find out where is the script/executable installed
    program_dir = os.path.dirname(sys.executable if getattr( sys, 'frozen', False ) else __file__)
    try:
        # open the file from the same directory so script works from any cwd
        workbook = xlrd.open_workbook(os.path.join(program_dir,'Actuarial program for BAM.xlsx'))
    except Exception as e:
          print("Exception occurred: {}".format(str(e)))