在QListWidget中查看textfile,添加和删除

View textfile in QListWidget, add and remove

我希望能够将时间戳添加到 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_())

有没有简单的方法可以从文本文件中读取列表以及在按下按钮时附加新的时间戳?添加一个按钮,在单击时删除 "oldest" 时间戳也很好。

我正在尝试为我的妻子制作一个母乳喂养应用程序:)

这里是 PyQt 菜鸟。感谢您的帮助。

将数据保存到 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_())