PYQT4 не умеет писать в excelwriter
У меня есть графический интерфейс, который я создал в pyqt4, который имеет функцию для вызова модуля, который должен записывать в лист Excel с помощью pandas excelwriter. По какой-то причине он создает рабочий лист, но ничего не записывает в него. Это просто сбивает мой qui без каких-либо ошибок.. Когда я запускаю его в режиме отладки, он, очевидно, проходит без каких-либо проблем. Я отлаживал это в течение последних нескольких дней и сейчас нахожу проблему между pyqt и excelwriter. Есть ли известная проблема, что pyqt не нравится pandas excelwriter?
from PyQt4 import QtCore,QtGui
import sys
from MAIN_GUI import *
if __name__=="__main__":
app = Qt.Gui.QApplication(sys.argv)
class MAIN_GUI(QtGui.QMainWindow):
def __init__self:
super(MAIN_GUI, self.__init__:
self.uiM=Ui_MainWindow
self.uiM.setupUi(self)
self.connect(self.uiM.updateALL_Button,QtCore.SIGNAL('clicked()'),self.updateALLEXCEL)
def updateALLEXCEL(self):
import excel_dummy
main_gui = MAIN_GUI()
main_gui.show()
main_gui.raise_()
sys.exit(app.exec_())
--- --- excel_dummy.py
import pandas as pd
from pandas import ExcelWriter
def excelify():
with ExcelWriter('/home/Desktop/Excelified/final.xlsx', engine='xlsxwriter') as writer:
workbook=writer.book
worksheet=workbook.add_worksheet()
worksheet.write(2,2,'just write something')
writer.save()
excelify()
--- --- MAIN_GUI.py
from PyQt4 import QtCore,QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.unicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(320,201)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.updateALL_Button = QtGui.QPushButton(self.centralwidget)
self.updateALL_Button.setGeometry(QtCore.QRect(40,110,161,27))
self.updateALL_Button.setFocusPolicy(QtCore.Qt.NoFocus)
self.updateAll_Button.setObjectName(_fromUtf8("Options_updateALL_Button"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 320, 24))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self,MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.updateALL_Button.setText(_translate("MainWindow", "updateALL", None))
2 ответа
Код ниже работает для меня. После нажатия updateALL
Кнопка, это печатает это:
file size: 5259 "/tmp/final.xlsx"
и просмотр полученного файла показывает это:
Обратите внимание, что мне пришлось исправить довольно много ошибок, чтобы ваш пример заработал. Поэтому убедитесь, что вы используете все файлы ниже при тестировании:
main.py:
import sys
from MAIN_GUI import *
from PyQt4 import QtGui, QtCore
if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
class MAIN_GUI(QtGui.QMainWindow):
def __init__(self):
super(MAIN_GUI, self).__init__()
self.uiM = Ui_MainWindow()
self.uiM.setupUi(self)
self.connect(self.uiM.updateALL_Button,QtCore.SIGNAL('clicked()'),self.updateALLEXCEL)
def updateALLEXCEL(self):
try:
import excel_dummy
except:
from traceback import format_exception
msg = ''.join(format_exception(*sys.exc_info()))
mb = QtGui.QMessageBox()
mb.setWindowTitle('Error')
mb.setText('Click Show Details to get the Traceback')
mb.setDetailedText(msg)
mb.exec_()
main_gui = MAIN_GUI()
main_gui.show()
main_gui.raise_()
sys.exit(app.exec_())
excel_dummy.py:
import os, pandas as pd
from pandas import ExcelWriter
def excelify():
path = '/tmp/final.xlsx'
with ExcelWriter(path, engine='xlsxwriter') as writer:
workbook = writer.book
worksheet = workbook.add_worksheet()
worksheet.write(2, 2, 'just write something')
writer.save()
print('file size: %s "%s"' % (os.stat(path).st_size, path))
excelify()
MAIN_GUI.py:
from PyQt4 import QtCore,QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.unicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(320,201)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.updateALL_Button = QtGui.QPushButton(self.centralwidget)
self.updateALL_Button.setGeometry(QtCore.QRect(40,110,161,27))
self.updateALL_Button.setFocusPolicy(QtCore.Qt.NoFocus)
self.updateALL_Button.setObjectName(_fromUtf8("Options_updateALL_Button"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 320, 24))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self,MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.updateALL_Button.setText(_translate("MainWindow", "updateALL", None))
Ваш writer.save()
заявление за пределами with ExcelWriter(...) as writer:
блок. Попробуйте запустить его с оператором внутри блока.
with ExcelWriter('/home/Desktop/Excelified/final.xlsx', engine='xlsxwriter') as writer:
workbook=writer.book
worksheet=workbook.add_worksheet()
worksheet.write(2,2,'just write something')
writer.save()