PyQt QFileDialog getOpenFileName 不能从命令行工作(Windows)

Posted

技术标签:

【中文标题】PyQt QFileDialog getOpenFileName 不能从命令行工作(Windows)【英文标题】:PyQt QFileDialog getOpenFileName not working from command line (windows) 【发布时间】:2016-04-22 16:32:16 【问题描述】:

我正在尝试制作一个 gui(Qt 设计器)来导入一个 excel 文件并在 gui 中显示数据。

当我从我的 IDE (Spyder) 中运行该脚本时,它运行良好,但如果我从命令窗口运行它或从 Windows 资源管理器打开 python 文件,则导入功能不起作用。 (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_())

【问题讨论】:

【参考方案1】:

我自己找到了一个解决方案,将 excel_file 变量转换为字符串。

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

【讨论】:

以上是关于PyQt QFileDialog getOpenFileName 不能从命令行工作(Windows)的主要内容,如果未能解决你的问题,请参考以下文章

PyQt - QFileDialog - 直接浏览到文件夹?

PyQT5 QFileDialog窗口标题未在mac上显示

单击文件名时 PyQt5 QFileDialog 关闭

PyQt4和PyQt5中的QFileDialog字符串有区别吗?

Pyinstaller 的 PyQT5 QFileDialog 问题

PyQt4文件对话框QFileDialog