因此,我试图编写一个代码,将csv文件加载到每个选项卡上的QTableWidget中,然后可以在其顶部编辑和保存。然而,当我保存时,程序由于各种原因崩溃。虽然没有设置自动加载,但我试图一次解决一个问题!
我看到过很多帖子似乎都在问同样的问题,但在实现它们时,它们似乎不起作用,有些是因为它们使用tableview而不是QTableWidget,有些可能是因为我没有正确地实现它,因为我还不熟悉编码。
类MyTabs(QWidget):
def __init__(self, parent):
super(QWidget, self).__init__(parent)
layout = QVBoxLayout(self)
# Initialize tab screen
self.tabs = QTabWidget()
self.tabmon = QWidget()
self.tabtue = QWidget()
# Add tabs
self.tabs.addTab(self.tabmon, "Monday")
self.tabs.addTab(self.tabtue, "Tuesday")
#Save Button
self.buttonSavemon = QtWidgets.QPushButton('Save', self)
self.buttonSavemon.clicked.connect(self.handleSavemon)
self.buttonSavetue = QtWidgets.QPushButton('Save', self)
self.buttonSavetue.clicked.connect(self.handleSavetue)
#Initiate Tables
self.createTable()
# Create Monday tab
self.tabmon_layout = QVBoxLayout(self.tabmon)
self.tabmon_layout.addWidget(self.tablewidgetmon)
self.tabmon_layout.addWidget(self.buttonSavemon)
# Create Tuesday tab
self.tabtue_layout = QVBoxLayout(self.tabtue)
self.tabtue_layout.addWidget(self.tablewidgettue)
self.tabtue_layout.addWidget(self.buttonSavetue)
# Add tabs to widget
layout.addWidget(self.tabs)
def createTable(self):
#Monday Table
self.tablewidgetmon = QTableWidget()
self.tablewidgetmon.setRowCount(10)
self.tablewidgetmon.setColumnCount(2)
self.tablewidgetmon.setHorizontalHeaderLabels(["Time", "File Name"])
#Tuesday Table
self.tablewidgettue = QTableWidget()
self.tablewidgettue.setRowCount(12)
self.tablewidgettue.setColumnCount(2)
self.tablewidgettue.setHorizontalHeaderLabels(["Time", "File Name"])
def handleSavemon(self):
with open('monschedule.csv', 'wb') as stream:
writer = csv.writer(stream)
for row in range(self.tablewidgetmon.rowCount()):
rowdata = []
for column in range(self.tablewidgetmon.columnCount()):
item = self.tablewidgetmon.item(row, column)
if item is not None:
rowdata.append(
unicode(item.text()).encode('utf8'))
else:
rowdata.append('')
writer.writerow(rowdata)
def handleSavetue(self):
with open('tueschedule.csv', "w") as fileOutput:
writer = csv.writer(fileOutput)
for rowNumber in range(self.tablewidgettue.rowCount()):
fields = [
self.tablewidgettue.data(
self.tablewidgettue.index(rowNumber, columnNumber),
QtCore.Qt.DisplayRole
)
for columnNumber in range(self.tablewidgettue.columnCount())
]
writer.writerow(fields)
我尝试了两种方法来保存这里,周一函数似乎是最有希望的,但是给我一个错误,因为数据是字符串。
从查看csv文件后,它似乎已清除原始文件,但没有保存新数据。
试试吧:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import csv
class MyTabs(QWidget):
def __init__(self, parent=None):
super(QWidget, self).__init__(parent)
layout = QVBoxLayout(self)
# Initialize tab screen
self.tabs = QTabWidget()
self.tabmon = QWidget()
self.tabtue = QWidget()
# Add tabs
self.tabs.addTab(self.tabmon, "Monday")
self.tabs.addTab(self.tabtue, "Tuesday")
#Save Button
self.buttonSavemon = QtWidgets.QPushButton('Save', self)
self.buttonSavemon.clicked.connect(self.handleSavemon)
self.buttonSavetue = QtWidgets.QPushButton('Save', self)
self.buttonSavetue.clicked.connect(self.handleSavetue)
#Initiate Tables
self.createTable()
# Create Monday tab
self.tabmon_layout = QVBoxLayout(self.tabmon)
self.tabmon_layout.addWidget(self.tablewidgetmon)
self.tabmon_layout.addWidget(self.buttonSavemon)
# Create Tuesday tab
self.tabtue_layout = QVBoxLayout(self.tabtue)
self.tabtue_layout.addWidget(self.tablewidgettue)
self.tabtue_layout.addWidget(self.buttonSavetue)
# Add tabs to widget
layout.addWidget(self.tabs)
def createTable(self):
#Monday Table
self.tablewidgetmon = QTableWidget()
self.tablewidgetmon.setRowCount(10)
self.tablewidgetmon.setColumnCount(2)
self.tablewidgetmon.setHorizontalHeaderLabels(["Time", "File Name"])
#Tuesday Table
self.tablewidgettue = QTableWidget()
self.tablewidgettue.setRowCount(12)
self.tablewidgettue.setColumnCount(2)
self.tablewidgettue.setHorizontalHeaderLabels(["Time", "File Name"])
def handleSavemon(self):
# with open('monschedule.csv', 'wb') as stream:
with open('monschedule.csv', 'w') as stream: # 'w'
writer = csv.writer(stream, lineterminator='\n') # + , lineterminator='\n'
for row in range(self.tablewidgetmon.rowCount()):
rowdata = []
for column in range(self.tablewidgetmon.columnCount()):
item = self.tablewidgetmon.item(row, column)
if item is not None:
# rowdata.append(unicode(item.text()).encode('utf8'))
rowdata.append(item.text()) # +
else:
rowdata.append('')
writer.writerow(rowdata)
def handleSavetue(self):
with open('tueschedule.csv', "w") as fileOutput:
writer = csv.writer(fileOutput)
for rowNumber in range(self.tablewidgettue.rowCount()):
# +
fields = [
self.tablewidgettue.item(rowNumber, columnNumber).text() \
if self.tablewidgettue.item(rowNumber, columnNumber) is not None else ""
for columnNumber in range(self.tablewidgetmon.columnCount())
]
writer.writerow(fields)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
main = MyTabs()
main.show()
sys.exit(app.exec_())
您将以二进制文件而不是文本文件的形式打开文件。这就是为什么函数需要一个类似字节的对象。
要解决此问题,请删除open
调用中的“b”标志:
with open('monschedule.csv', 'w') as stream:
顺便说一下,行rowdata。追加(unicode(item.text()).encode('utf8'))
应该是rowdata。追加(item.text())
我想使用以下格式的多维数组:value[n][],其中n是问题编号。使用此新设置,您将得到以下输入字段: 请注意,选定的值编码在value属性中。name属性只包含值所属的问题。 因此,上述输入说明的是: 我想在下面的“问题”和“答案”数据库表中插入这些详细信息: 问题表: 答案表: 现在,我已经尝试编写下面的mysqli/php代码来将这些值插入数据库,但是我收到了错误,并且在想要实现我想要实现
问题内容: 我有一个QTableWidget,我将此表中的数据导出到一个csv文件中。但是现在,我想打开一个现有的csv文件,并使用此数据填充我的表。我该怎么做? 这是我的导出代码,我想要一个“填充”代码,我真的不知道该怎么做。.我知道如何读取一个csv,但我不知道如何用此csv数据填充我的表。 问题答案: 看起来您可以在此处使用该模块: PyQt5版本:
我有一个独立的H2服务器,正在收集数据。为了进行测试,我希望将数据从服务器中提取到CSV文件中。有什么工具吗?
问题内容: 我有一堂课: 第二类: 如何从我的应用程序将该信息保存到CSV文件中?我会提供从2.3.3到4.2.2的兼容性,所以我不会使用无法做到这一点的库。您能帮我写些代码吗?谢谢你们!! 另一件事..要导出此文件,必须在manifest.xml中添加什么权限? 问题答案: 您将需要使用诸如opencsv之类的库(可在此处找到:http : //sourceforge.net/projects/
问题内容: 如何使用Logstash将数据从Elasticsearch导出到CSV?我只需要包括特定的列。 问题答案: 安装2个插件:elasticsearch输入插件和csv输出插件。然后创建一个配置文件。这是这种情况的一个很好的例子。 您现在就可以开始了,只需运行: 并检查中指定的文件。
想要知道更多东西吗?当你需要从表中查找某些值时,可以使用冗长的 case 语句或 selectors 实现,但更整洁的方式是使用 extlookup 函数实现。 在 puppetmaster 上可以使用 extlookup 函数查询外部的 CSV 文件,并返回匹配的数据片段。 将所有数据组织到一个单一的文件并将它从 Puppet 配置清单中分离出来, 可以使维护工作变得更简单,也便于与其他人分享: