почему возникает ошибка при отмене qfiledialog? - PullRequest
0 голосов
/ 27 сентября 2018

Это мой код

def report_one_friend(self):

filename = QFileDialog.getSaveFileName(self, "", "cars.xlsx","Excel(.xlsx)")

if filename:
    openFile = open(filename, 'r').read()
    self.plainTextEdit.appendPlainText(openFile)



wb = xlsxwriter.Workbook(filename[0])
sheet1 = wb.add_worksheet()
sql = '''SELECT * FROM ahmed WHERE mth_search = %s'''
mth_search = self.lineEdit_3.text()
c = self.conn.cursor()
c.execute(sql, [(mth_search)])
data = c.fetchall()
for row in data:
    print(row)
    sheet1.write(0,2,'الاسم')
    sheet1.write(0,0,row[1])

    sheet1.write(1, 2, 'الرقم')
    sheet1.write(1, 0, row[2])

wb.close()

, и это дает мне ошибку:

 Connected to MySQL database using C extension... MySQL Server version on  8.0.12
    Traceback (most recent call last):
      File "/Users/mahmoudtarek/Desktop/mth1/index.py", line 174, in mth_friends
        self.report_one_friend()
      File "/Users/mahmoudtarek/Desktop/mth1/index.py", line 208, in report_one_friend
        openFile = open(filename, 'r').read()
    TypeError: expected str, bytes or os.PathLike object, not tuple

1 Ответ

0 голосов
/ 27 сентября 2018

вы получаете кортеж "выбранный файл" и "примененный фильтр".

пример минимального кода:

from PyQt5.Qt import *
app = QApplication([])
print(QFileDialog.getSaveFileName())

выбранный "некоторый файл": ('C:/scratches/scratch.py', 'All Files (*)')

Но когда вы что-то не выбираете и не отменяете диалоговое окно, две строки остаются пустыми: ('', '').
Поскольку кортеж с двумя строками - true, вы пытаетесь open() файлс этим, что приводит к ошибке.


Решение:
распакуйте кортеж в две переменные или используйте индекс [0], как показано ниже:

filename, filter = QFileDialog.getSaveFileName(self, "", "cars.xlsx","Excel(.xlsx)")
if filename:
    openFile = open(filename, 'r').read()
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...