2017-11-29 4 views
1

QTableWidget을 사용하여 데이터를 저장하고로드하는 앱을 작성하려고합니다.PyQt4에서 데이터를로드하고 저장하는 방법은 무엇입니까?

더 복잡한 응용 프로그램을 작성하고 싶습니다. 따라서 많은 pyqt 클래스를 사용하여 여러 페이지를 정의합니다.

import sys 
from PyQt4 import QtGui, QtCore 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self, parent = None): 
     QtGui.QMainWindow.__init__(self) 

     load_file = QtGui.QAction("Load", self) 
     load_file.triggered.connect(self.loadFile) 
     save_file = QtGui.QAction("Save", self) 
     save_file.triggered.connect(self.saveFile) 

     menubar = self.menuBar() 
     file = menubar.addMenu('&File') 
     file.addAction(load_file) 
     file.addAction(save_file) 

     table = Table() 

     self.setCentralWidget(table) 

    def loadFile(self): 
     load_file = QtGui.QFileDialog.getOpenFileName(self, "Open file", "./", "All files(*)") 
     if load_file: 
      with open(load_file, "r") as load_data: 
       data = eval(load_data.read()) 

      Table().filling(data) 

    def saveFile(self): 
     save_file = QtGui.QFileDialog.getSaveFileName(self, "Save file", "./", "All files(*)") 
     if save_file: 
      with open(save_file, "w") as save_data: 
       save_data.write(repr(DATA)) 

class Table(QtGui.QTableWidget): 
    def __init__(self, parent = None): 
     QtGui.QTableWidget.__init__(self) 

     self.setRowCount(4) 
     self.setColumnCount(2) 
     self.itemChanged.connect(self.getData) 

    def getData(self): 
     data = [] 
     for row in range(4): 
      row_data = [] 
      for col in range(2): 
       if self.item(row, col): 
        text = self.item(row, col).text() 
        row_data.append(str(text)) 
       else: 
        row_data.append("") 
      data.append(row_data) 
     global DATA 
     DATA = data 

    def filling(self, data): 
     for row in range(4): 
      for col in range(2): 
       new_item = QtGui.QTableWidgetItem("") 
       self.setItem(row, col, new_item) 
       self.item(row, col).setText(data[row][col]) 

app = QtGui.QApplication(sys.argv) 
main = MainWindow() 
main.show() 
sys.exit(app.exec_()) 

앱이 QTableWidget의 데이터 여과 및 분리를 저장할 수 있지만,로드 된 데이터를 표시 할 수 없습니다 : 다음은 코드입니다. enter image description here 문제가 무엇인지 알고 싶습니다.

답변

1

Table().filling()을 호출 할 때 다른 테이블을 만들고 채우는 것이므로 클래스의 테이블 멤버를 만드는 것이 적절하기 때문에이 문제가 발생합니다.

class MainWindow(QtGui.QMainWindow): 
    def __init__(self, parent = None): 
     [...] 

     self.table = Table(self) 

     self.setCentralWidget(self.table) 

    def loadFile(self): 
     load_file = QtGui.QFileDialog.getOpenFileName(self, "Open file", "./", "All files(*)") 
     if load_file: 
      with open(load_file, "r") as load_data: 
       data = eval(load_data.read()) 
       print(data) 

      self.table.filling(data) 
    [...] 
관련 문제