2017-01-03 3 views
0

Ich versuche mit dem xlrd-Modul eine sehr einfache App in Kivy zu erstellen. Ich habe eine Excel-Tabelle mit einigen Daten und ich möchte die Zelle (2,1) als eine Bezeichnung zeigen. Hier ist mein Code so weit:So führen Sie Kivy und das XLRD-Modul ordnungsgemäß aus

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

Zunächst einmal ich verstehe, dass das Etikett gibt mir nur den wörtlichen Text sheet.cell_value (2,1). Mein Problem liegt in den Arbeitsmappen- und Blattvariablen. Wenn ich versuche, das Programm auszuführen, passiert nichts. Wenn ich jedoch die beiden Zeilen ('workbook =', und 'sheet =') auszeichne, wird das Programm ausgeführt und öffnet ein Fenster von Kivy mit dem Text sheet.cell_value (2,1). Gibt es ein Problem mit der Art, wie ich den Code formatiert habe?

Außerdem befindet sich die Excel-Datei im selben Verzeichnis wie das .py-Programm.

Antwort

0

Label(text='sheet.cell_value(2,1)') zeigt sheet.cell_value(2,1) wörtlich, da es zitiert wird. Sie müssen es aufheben, und da sheet ein Klassenmitglied ist, müssen Sie es durch self oder MyApp voranstellen. Ich würde gehen mit dem self Präfix zum Beispiel:

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)) 

wenn die xlsx-Datei im selben Verzeichnis wie das Programm ist würde ich das empfehlen (und würde Ausnahmen fangen & sie angezeigt werden):

# 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

Danke für den Vorschlag, aber das Programm wird immer noch nicht ausführen/geben Sie mir ein Kivy-Fenster. Nur um zu verdeutlichen, sind die Zeilen 'program_dir' und' workbook', die Sie geschrieben haben, unter der Klasse "MyApp (App)" zu verstehen: "Richtig? –

+0

ja. In Ihrer Frage sagen Sie, dass Sie etwas auskommentieren, und es funktioniert, aber ich bin mir nicht sicher, was Sie kommentieren. –

+0

'#workbook = xlrd.open_workbook ('Aktuarielles Programm für BAM.xlsx')' '#sheet = workbook.sheet_by_index (0)' Wenn diese zwei Codezeilen auskommentiert werden, wird Kivy ein Fenster öffnen und öffnen. –

Verwandte Themen