簡體   English   中英

使用舊設置啟動應用程序

[英]launching the application with the old settings

我需要在啟動時勾選復選框,繪制圖表,並寫入匯率,就像應用程序關閉時一樣。 這是來自 pyqt 的代碼:

這是應恢復其數據的代碼的一部分:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from ui import Ui_MainWindow
from py_currency_converter import convert
import json
import pyqtgraph as pg
from graph import Graph


class Currency(QtWidgets.QMainWindow):
    def __init__(self):
        super(Currency, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.chkv()
        self.g = Graph()

    def chkv(self):
        self.ui.dollar.stateChanged.connect(lambda: self.checked_value())
        self.ui.euro.stateChanged.connect(lambda: self.checked_value())
        self.ui.funt.stateChanged.connect(lambda: self.checked_value())
        self.ui.aud.stateChanged.connect(lambda: self.checked_value())
        self.ui.lev.stateChanged.connect(lambda: self.checked_value())
        self.ui.frank.stateChanged.connect(lambda: self.checked_value())

    pend = pg.mkPen(color=(255, 0, 0))
    pene = pg.mkPen(color=(0, 255, 0))
    penf = pg.mkPen(color=(0, 0, 255))
    pena = pg.mkPen(color=(255, 0, 255))
    penl = pg.mkPen(color=(255, 255, 0))
    penfr = pg.mkPen(color=(0, 255, 255))

    def checked_value(self):
        if self.ui.dollar.isChecked():
            self.ui.curslbl1.setText("1 USD = " + json.dumps(convert(base='USD', amount=1, to=['RUB']))[8:12] + " RUB")
            self.ui.widget.plot(self.g.month_dollar_data, self.g.month_dollar_curs, pen=self.pend)
            self.ui.widget_2.plot(self.g.year_dollar_data, self.g.year_dollar_curs, pen=self.pend)
        else:
            self.ui.curslbl1.setText("")
        if self.ui.euro.isChecked():
            self.ui.curslbl2.setText("1 EUR = " + json.dumps(convert(base='EUR', amount=1, to=['RUB']))[8:12] + " RUB")
            self.ui.widget.plot(self.g.month_euro_data, self.g.month_euro_curs, pen=self.pene)
            self.ui.widget_2.plot(self.g.year_euro_data, self.g.year_euro_curs, pen=self.pene)
        else:
            self.ui.curslbl2.setText("")
        if self.ui.funt.isChecked():
            self.ui.curslbl3.setText("1 GBP = " + json.dumps(convert(base='GBP', amount=1, to=['RUB']))[8:12] + " RUB")
            self.ui.widget.plot(self.g.month_funt_data, self.g.month_funt_curs, pen=self.penf)
            self.ui.widget_2.plot(self.g.year_funt_data, self.g.year_funt_curs, pen=self.penf)
        else:
            self.ui.curslbl3.setText("")
        if self.ui.aud.isChecked():
            self.ui.curslbl4.setText("1 AUD = " + json.dumps(convert(base='AUD', amount=1, to=['RUB']))[8:12] + " RUB")
            self.ui.widget.plot(self.g.month_aud_data, self.g.month_aud_curs, pen=self.pena)
            self.ui.widget_2.plot(self.g.year_aud_data, self.g.year_aud_curs, pen=self.pena)
        else:
            self.ui.curslbl4.setText("")
        if self.ui.lev.isChecked():
            self.ui.curslbl5.setText("1 BGN = " + json.dumps(convert(base='BGN', amount=1, to=['RUB']))[8:12] + " RUB")
            self.ui.widget.plot(self.g.month_lev_data, self.g.month_lev_curs, pen=self.penl)
            self.ui.widget_2.plot(self.g.year_lev_data, self.g.year_lev_curs, pen=self.penl)
        else:
            self.ui.curslbl5.setText("")
        if self.ui.frank.isChecked():
            self.ui.curslbl6.setText("1 CHF = " + json.dumps(convert(base='CHF', amount=1, to=['RUB']))[8:12] + " RUB")
            self.ui.widget.plot(self.g.month_frank_data, self.g.month_frank_curs, pen=self.penfr)
            self.ui.widget_2.plot(self.g.year_frank_data, self.g.year_frank_curs, pen=self.penfr)
        else:
            self.ui.curslbl6.setText("")


app = QtWidgets.QApplication([])
application = Currency()
application.show()

sys.exit(app.exec())

我真的不知道我到底需要做什么,如果你能幫助我,我將不勝感激

您需要做的是收集所有需要保存到某種持久結構化容器中的數據,並在應用程序觸發關閉事件時將其保存在一致的位置,然后在應用程序運行時查看相同位置以重新加載以前的數據。

我將使用一個非常簡單的示例來保存一些文本:

class Currency(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.textEdit = QPlainTextEdit()
        self.setCentralWidget(self.textEdit)

現在,一旦我添加了一些段落或其他內容,如果我希望它在下次啟動應用程序時仍然存在,那么信息需要保存在應用程序關閉和再次啟動之間的某個位置。

為此,我將使用json文件,但.csv文件、數據庫或純文本文件也同樣適用。 它只需要存儲在一個一致的位置,這樣當你的應用程序再次啟動時它就知道去哪里找。

STORAGE_PATH = "/home/.MyAppName/data.json"

class Currency(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.textEdit = QPlainTextEdit()
        self.setCentralWidget(self.textEdit)
        self.loadData()

    def loadData(self):
        if os.path.exists(STORAGE_PATH):
            data = json.load(open(STORAGE_PATH))
            self.textEdit.setPlainText(data['text'])

    def closeEvent(self, event):
        text = self.textEdit.toPlainText()
        data = {"text": text}
        with open(STORAGE_PATH, "wt") as jsonfile:
            json.dump(data, jsonfile)   
        return super().closeEvent(event)

要在您的應用程序中完成這項工作,您需要做的就是收集不同的 plot 值並將它們添加到某種結構化存儲容器中,然后在啟動應用程序時重新繪制它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM