2017-01-03 15 views
0

Я пытаюсь сделать очень простое приложение в Kivy с помощью модуля xlrd. У меня есть таблица Excel с некоторыми данными, и я хочу показать ячейку (2,1) в качестве метки. Вот мой код до сих пор:Как правильно управлять Kivy и XLRD-модулем

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 = »), программа запустится, открыв окно из Kivy с текстом sheet.cell_value (2,1). Есть ли проблема с тем, как я отформатировал код?

Кроме того, файл excel находится в том же каталоге, что и программа .py.

ответ

0

Label(text='sheet.cell_value(2,1)') отображает sheet.cell_value(2,1) буквально, так как это указано. Вы должны его недооценить, а так как sheet является участником класса, вы должны указать его self или MyApp. Я бы с приставкой 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))) 
+0

Спасибо за предложение, но программа все равно не выполнит/дайте мне окно кив. Чтобы уточнить, строки 'program_dir' и' workbook', которые вы написали, должны находиться под 'class MyApp (App):' correct? –

+0

есть. В вашем вопросе вы говорите, что вы что-то замечаете, и это работает, но я не уверен, что вы комментируете. –

+0

'#workbook = xlrd.open_workbook ('Actuarial program for BAM.xlsx')' '#sheet = workbook.sheet_by_index (0)' когда эти две строки кода закомментированы, Kivy запустит и откроет окно. –

 Смежные вопросы

  • Нет связанных вопросов^_^