PYQT4无法写入excelwriter
我有一个在pyqt4中创建的gui,它有一个调用模块的函数,该模块应该使用excelwriter写入excel工作表。出于某种原因,它创建了工作表,但没有在其中写入任何内容。它只是在没有任何错误的情况下崩溃了我的qui。当我在调试模式下运行它时,它显然没有任何问题。在过去的几天里,我一直在调试这个问题,现在我要指出pyqt和excelwriter之间的问题。是否有pyqt不喜欢excelwriter的已知问题PYQT4无法写入excelwriter,excel,pandas,pyqt,spreadsheet-excel-writer,Excel,Pandas,Pyqt,Spreadsheet Excel Writer,我有一个在pyqt4中创建的gui,它有一个调用模块的函数,该模块应该使用excelwriter写入excel工作表。出于某种原因,它创建了工作表,但没有在其中写入任何内容。它只是在没有任何错误的情况下崩溃了我的qui。当我在调试模式下运行它时,它显然没有任何问题。在过去的几天里,我一直在调试这个问题,现在我要指出pyqt和excelwriter之间的问题。是否有pyqt不喜欢excelwriter的已知问题 from PyQt4 import QtCore,QtGui import sys
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---
---MAIN_GUI.py---
您的writer.save()
语句位于之外,ExcelWriter(…)作为编写器:
块。试着用块内的语句运行它
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()
下面的代码适用于我。也就是说,在我单击
updateALL
按钮后,它将打印以下内容:
file size: 5259 "/tmp/final.xlsx"
查看生成的文件会显示以下内容:
请注意,我必须修复相当多的bug才能让您的示例正常工作。因此,请确保在测试时使用以下所有文件:
main.py:
excel_dummy.py:
MAIN_GUI.py:
@EKHUMO你认为你有解决这个问题的办法吗?没有办法运行你的示例代码,因为它不完整并且有语法错误。请阅读关于如何制作a的指导。很抱歉,我以为你可以看看它,看看问题是什么。我编辑/更新了我的问题嗯,我只是看了一下,我很容易发现它不会产生你所描述的任何问题。您发布的新代码也是如此(仍然充斥着语法错误)。您需要发布一个正确的、有效的测试用例,以便其他人可以尝试重现您看到的问题。您确定它甚至正在编写文件,并且您看到的不仅仅是一个旧文件吗?仅导入
excel\u dummy
不会运行excelify()
函数。仍然会终止所有操作。对不起,您可以添加更多详细信息吗?您遇到了什么错误,代码中出现了什么错误?好的。在我的示例中,我忘记了导入PyQt4及其组件…但我最初遇到了它。GUI仍然在终止,没有任何错误。您正在使用哪个版本的python和pandas成功运行此程序?我使用python-2.7.12和python-3.5.2以及pandas-0.19进行了测试。两者给出了相同的结果。你在测试我答案中的代码吗?除非你那样做,否则你不可能在这方面取得任何进展。是的,复制的都是一样的。“我在用蟒蛇2的蟒蛇2.7和熊猫0.17.0。”丹尼尔。我在main.py
中添加了一个错误处理程序。请尝试并发布回溯(如果有)。您的解决方案有效。显然,问题是pandas需要为0.18.0或更高,才能使excelwriter在PyQt中正常工作。
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()
file size: 5259 "/tmp/final.xlsx"
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_())
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()
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))