2016-04-22 12 views
1

Я пытаюсь создать gui (Qt Designer) для импорта файла excel и отображения данных в gui.PyQt QFileDialog getOpenFileName не работает из командной строки (windows)

Сценарий отлично работает, когда я запускаю его из своей IDE (Spyder), но если я запустил его из окна команд или открыл файл python из обозревателя Windows, функция импорта не работает. (Gui запускается нормально, но когда нажата кнопка импорта и выбран файл, ничего не происходит и не возникает ошибки. При запуске из Spyder данные импортируются и отображаются в gui, как ожидалось).

Если я предварительно выбираю местоположение файла (закомментировано в приведенном ниже коде), то сценарий отлично работает в командной строке или щелчком от проводника.

Спасибо за помощь!

Python 2.7 (Anaconda), Windows 10, 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_()) 

ответ

0

Ну я нашел решение сам путем преобразования excel_file переменную в строку.

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