Python 检查PyQT表是否已编辑?
我的代码有一些问题,因为我无法解决“保存PyQt表并将其写入UPOI文件”的问题 我不明白用“实例”来检查表是否被编辑的想法 这应该是保存文件的倒退,但我无法解决它 PS:这是孔代码。。。(代码背后的想法是,打开一个UPOI文件并在QT表中编辑它,之后应该将其保存在同一个文件或新文件中。(不是很重要)Python 检查PyQT表是否已编辑?,python,pyqt,instance,Python,Pyqt,Instance,我的代码有一些问题,因为我无法解决“保存PyQt表并将其写入UPOI文件”的问题 我不明白用“实例”来检查表是否被编辑的想法 这应该是保存文件的倒退,但我无法解决它 PS:这是孔代码。。。(代码背后的想法是,打开一个UPOI文件并在QT表中编辑它,之后应该将其保存在同一个文件或新文件中。(不是很重要) from PyQt5 import uic from PyQt5.QtGui import QStandardItemModel from PyQt5.QtWidgets import QAppl
from PyQt5 import uic
from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout, QTableView, QFileDialog
import sys
import csv
"""
UPOI-Editor
Ein Fenster, welches eine Tabelle enthält, in welchem man upoi. Files
einlesen kann und diese anschließend bearbeitet und/oder speichert.
"""
class View(QWidget):
"""
Konstruktor, ruft die QT Tabelle auf
"""
def __init__(self):
super().__init__()
uic.loadUi('Block1.ui',self)
"""
Erstellt eine List mit der Größe der Tabelle
"""
def fillTables(self,daten):
self.tableWidget.setRowCount(9)
ii = 0
for row in daten:
for columns in row:
self.tableWidget.setItem(0,ii, QTableWidgetItem(columns))
ii +=1
"""
Öffnet den Finder um ein File auszuwählen
"""
def openFinder(self):
filename,_ = QFileDialog.getOpenFileName(self,"openFile","~/")
return filename
class Model:
"""
Konstruktor,
"""
def __init__(self):
super().__init__()
self.daten = []
with open('user.upoi', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter='|')
for row in spamreader:
print(', '.join(row))
"""
Liest das UPOI File und speichert es in der Variable daten
"""
def readFile(self,pfad):
with open(pfad, encoding='utf-8', newline='') as csvfile:
sn = csv.Sniffer()
sn.preferred = ['|']
dialect = sn.sniff(csvfile.read(1024))
self.delFav()
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)
for row in reader:
self.daten.append(row)
def delFav(self):
# 1. Reihe muss entfernt werden
while "@Favorites" in self.daten: self.daten.remove("@Favorites")
while "@MyPOIs" in self.daten: self.daten.remove("@MyPOIs")
@staticmethod
def cellChanged(item):
text = item.text()
irow = item.row()
icolumn = item.column()
print(text, irow, icolumn)
# FEHLER WEGEN DER INSTANCE
Model.instance.content[irow][icolumn] = text
# FEHLER WEGEN DER INSTANCE
def writeFile(self,daten):
with open('user.upoi','w',encoding='utf-16',newline='') as csv_file:
writer = csv.writer(csv_file, delimiter='|')
writer.writerows(daten)
csv_file.close()
class Controller:
"""
Konstruktor,
"""
def __init__(self):
# KANN DAS SO STIMMEN?
# if Controller.instance is None: Controller.instance = self
# KANN DAS SO STIMMEN?
self.view = View()
self.model = Model()
self.view.openButton.clicked.connect(self.fillTable)
# self.view.saveButton.clicked.connect(self.saveFile())
#lambda x = self.view.openFinder(),y = self.daten :
# HIER TRITT DER FEHLER AUF
self.view.tableWidget.itemChanged.connect(Model.cellChanged())
# HIER TRITT DER FEHLER AUF
# if Controller.instance is None: Controller.instance = self
"""
Ruft die View auf
"""
def startGame(self):
self.view.show()
"""
Befüllt die Tabelle mit den Daten aus dem upoi. File
"""
def fillTable(self):
pfad = self.view.openFinder()
self.model.readFile(pfad)
self.view.fillTables(self.model.daten)
"""
Hier soll die Tabelle gespeichert werden
@TODO wie kann man schauen, ob Daten in der Tabelle verändert werden
und diese anschließend in das File speichern
"""
@staticmethod
def saveTable(item):
Controller.instance.model.saveData(item.text, item.row, item.column)
App = QApplication(sys.argv)
controller = Controller()
controller.startGame()
sys.exit(App.exec())