2016-04-22 15 views
1

Ich versuche, eine GUI (Qt Designer) zu machen, um eine Excel-Datei zu importieren und die Daten in der GUI anzuzeigen.PyQt QFileDialog getOpenFileName funktioniert nicht von der Kommandozeile (Windows)

Das Skript funktioniert gut, wenn ich es aus meiner IDE (Spyder) ausführen, aber wenn ich es aus dem Befehlsfenster oder durch Öffnen der Python-Datei von Windows Explorer ausführen, funktioniert die Importfunktion nicht. (Die GUI startet gut, aber wenn die Import-Schaltfläche gedrückt wird und die Datei ausgewählt wird, passiert nichts und es wird kein Fehler erzeugt. Bei der Ausführung von Spyder werden die Daten importiert und wie erwartet in der GUI angezeigt).

Wenn ich den Speicherort der Datei vorwähle (im folgenden Code auskommentiert), funktioniert das Skript problemlos über die Befehlszeile oder durch Klicken auf den Explorer.

Danke für jede Hilfe!

Python 2.7 (Anaconda), 10 Fenster, PyQt4

import sys 
from PyQt4 import QtGui 
from excel_import_gui import Ui_MainWindow 
import xlrd 


class Main(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 

     self.setupSignals()  


    def set_import_data(self,data_to_import,table_to_change): 
     for row in range(len(data_to_import)): 
      for col in range(len(data_to_import[0])): 
       table_to_change.setRowCount(len(data_to_import)) 
       table_to_change.setColumnCount(len(data_to_import[0])) 
       item = data_to_import[row][col]  
       table_to_change.setItem(row,col,QtGui.QTableWidgetItem(str(item))) 


    def setupSignals(self): 
     self.ui.importData_btn.clicked.connect(self.select_file) 


    def select_file(self): 
     excel_file = QtGui.QFileDialog.getOpenFileName(self, 
     "Select Excel file to import","","Excel (*.xls *.xlsx)") 

#  excel_file = "C:/Users/Ben/Work/Python tests/Qt GUIs/Excel_import_GUI/fish_test.xlsx" 


     if excel_file: 
      open_excel_file = xlrd.open_workbook(excel_file) 
      self.start_import_data(open_excel_file) 


    def start_import_data(self, workbook): 
     #import data from excel file 
     workbook_data = [] 
     for sheetNum in range (workbook.nsheets): 
      worksheet = workbook.sheet_by_index(sheetNum) 
      workbook_data.append([[worksheet.cell_value(row,col) for col in range (worksheet.ncols)] for row in range(worksheet.nrows)]) 

     # Set each worksheet of workbook_data to each tab in GUI widget 
     self.set_import_data(workbook_data[0],self.ui.fish_table) 
     self.set_import_data(workbook_data[1],self.ui.boats_table) 


if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    window = Main() 
    window.show() 
    sys.exit(app.exec_()) 

Antwort

0

Nun fand ich eine Lösung selbst durch die excel_file Variable in einen String zu konvertieren.

excel_file = str(QtGui.QFileDialog.getOpenFileName(self, "Select Excel file to import","","Excel (*.xls *.xlsx)")) 
Verwandte Themen