PyQt QFileDialog getOpenFileName не работает из командной строки (Windows)

Я пытаюсь создать графический интерфейс (Qt Designer), чтобы импортировать файл excel и отображать данные в графическом интерфейсе.

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

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

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

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

person Tomaquet    schedule 22.04.2016    source источник


Ответы (1)


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

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