2017-06-13 173 views
0

我希望能夠將時間戳添加到QListWidget實例並將其保存到文本文件中。以及查看文本文件中已有的項目,以便在程序退出後保存項目。查看QListWidget中的文本文件,添加和刪除

此刻的代碼我把它保存到列表,我想,但我不認爲我關閉並重新打開該程序之前添加的項目:

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from datetime import datetime 


class feedingTime(QDialog): 
    def __init__(self): 
     QDialog.__init__(self) 
     layout = QVBoxLayout() 
     self.feedList = QListWidget() 
     self.label = QLabel(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),self) 
     self.button = QPushButton("Add time") 
     self.info = QLabel("Baby was last fed:") 

     layout.addWidget(self.label) 
     layout.addWidget(self.button) 
     layout.addWidget(self.info) 
     layout.addWidget(self.feedList) 
     self.setLayout(layout) 

     self.timer = QTimer(self.label) 
     self.timer.setInterval(1000) 
     self.timer.timeout.connect(self.displayTime) 
     self.timer.start() 

     self.button.clicked.connect(self.feedAdd) 

    def feedAdd(self): 
     self.feedList.addItem(self.label.text()) 

    def displayTime(self): 
     self.label.setText(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    dialog = feedingTime() 
    dialog.show() 
    sys.exit(app.exec_()) 

有沒有簡便的方法來從文本文件中讀取列表以及在按下按鈕時追加新的時間戳?添加一個按鈕可以在點擊時刪除「最老」的時間戳也很好。

我試着做一個brestfeeding應用程序爲我的妻子:)

PyQt的小白在這裏。謝謝您的幫助。

回答

0

將數據保存到logPyQt無關。所有你需要的是在Python中使用I/O的基本知識。我使用了簡單的log文件,該文件必須與腳本位於同一目錄(可以改進爲更復雜的內容)。我也實現了所需的delete按鈕,但是,我不確定我是否正確理解了"oldest" timestamp的含義。

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from datetime import datetime 

FILENAME = "history.log" 

class feedingTime(QDialog): 
    def __init__(self): 
     QDialog.__init__(self) 
     layout = QVBoxLayout() 
     self.feedList = QListWidget() 
     self.label = QLabel(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),self) 
     self.button = QPushButton("Add time") 
     self.info = QLabel("Baby was last fed:") 
     self.buttonDelete = QPushButton("Delete oldest") 

     layout.addWidget(self.label) 
     layout.addWidget(self.button) 
     layout.addWidget(self.info) 
     layout.addWidget(self.feedList) 
     layout.addWidget(self.buttonDelete) 
     self.setLayout(layout) 

     self.timer = QTimer(self.label) 
     self.timer.setInterval(1000) 
     self.timer.timeout.connect(self.displayTime) 
     self.timer.start() 

     self.button.clicked.connect(self.feedAdd) 
     self.buttonDelete.clicked.connect(self.deleteOldest) 

     self.loadOldData() 

    def deleteOldest(self): 
     self.feedList.takeItem(self.feedList.count() - 1) 
     lines = open(FILENAME).readlines() 
     with open(FILENAME, 'w') as f: 
      f.writelines(lines[1:]) 

    def feedAdd(self): 
     date = self.label.text() 
     self.feedList.addItem(date) 
     f = open(FILENAME, 'a') 
     f.write(date + '\n') 
     f.close() 
     self.feedList.sortItems(Qt.DescendingOrder) # change to AscendingOrder if want inverted order 

    def fillData(self, lines): 
     for line in lines: 
      self.feedList.addItem(line.rstrip()) 

    def loadOldData(self): 
     try: 
      file = open(FILENAME) 
      lines = file.readlines() 
      self.fillData(lines) 
     except IOError: 
      print "File" + FILENAME + "not found, skipping..." 

    def displayTime(self): 
     self.label.setText(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    dialog = feedingTime() 
    dialog.show() 
    sys.exit(app.exec_()) 
+0

非常感謝您的幫助和解釋。這對我很有幫助。我會更多地使用它,這樣我就能夠完全理解你添加的每一行代碼。再次。感謝您的幫助! – xrefor