2016-04-22 41 views
1

私はGUIを作成して、エクセルファイルをインポートし、GUIにデータを表示しようとしています。PyQt QFileDialog getOpenFileNameがコマンドライン(ウィンドウ)から機能しない

私のIDE(Spyder)内から実行するとスクリプトが正常に動作しますが、コマンドウィンドウから実行するか、WindowsエクスプローラからPythonファイルを開くとインポート機能が動作しません。 (guiは正常に起動しますが、インポートボタンを押してファイルを選択すると何も起こらず、エラーも発生しません。Spyderから実行すると、guiにデータがインポートされ、期待通りに表示されます)。

ファイルの場所を事前に選択すると(以下のコードでコメントアウトされています)、スクリプトはコマンドラインから、またはエクスプローラからクリックして正常に動作します。

ありがとうございました!

のPython 2.7(アナコンダ)、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)")) 
関連する問題