Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查PyQT表是否已编辑?_Python_Pyqt_Instance - Fatal编程技术网

Python 检查PyQT表是否已编辑?

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

我的代码有一些问题,因为我无法解决“保存PyQt表并将其写入UPOI文件”的问题

我不明白用“实例”来检查表是否被编辑的想法

这应该是保存文件的倒退,但我无法解决它

PS:这是孔代码。。。(代码背后的想法是,打开一个UPOI文件并在QT表中编辑它,之后应该将其保存在同一个文件或新文件中。(不是很重要)

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())