Python QT5 ( zapis wartości w combobox )

0

Cześć,
Potrzebuję mieć możliwość zapisu w oddzielnym oknie numer i przypisania go do comboboxa, tyle że chce aby te wartości były zapamiętane przy każdym ponownym uruchomieniu.
Poniżej zamieszczam mój kod testowy.

from PyQt5.QtWidgets import QLabel,QDialogButtonBox,QTableWidget, QTableWidgetItem, QVBoxLayout, QPushButton, QAction, QLineEdit, QMessageBox, QDateEdit,QHBoxLayout, QGridLayout
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import QtWidgets, QtGui


class Klient1(QWidget):
    def __init__(self):
        super(Klient1, self).__init__()
        self.setWindowTitle("Klient")
        self.setFixedSize(300, 200)
        self.initUI()

    def initUI(self):

        self.combobox = QtWidgets.QComboBox(self)
        self.combobox.move(10,10)
        self.combobox.resize(100,25)

        self.btn = QtWidgets.QPushButton('otworz',self)
        self.btn.clicked.connect(self.add)
        self.btn.move(10,50)
        self.btn.resize(100,25)

    def add(self,nowe):

        dodaj = Dodaj_zlecenie()
        dodaj.exec_()
        wartosc = (dodaj.numer)
        self.combobox.addItem(wartosc)
        dodaj.show()

class Dodaj_zlecenie(QDialog):

    def __init__(self, *args, **kwargs):
        super(Dodaj_zlecenie, self).__init__(*args, **kwargs)
        self.QBtn = QPushButton()
        self.QBtn.setText("Dodaj")
        self.setWindowTitle("Dodaj do listy")
        self.setFixedWidth(300)
        self.setFixedHeight(100)
        self.QBtn.clicked.connect(self.nowe)
        layout = QVBoxLayout()
                #
        self.listinput = QLineEdit()
        self.onlyInt = QIntValidator()
        self.listinput.setValidator(self.onlyInt)
        self.listinput.setPlaceholderText("Numer.")
        layout.addWidget(self.listinput)
        layout.addWidget(self.QBtn)
        self.setLayout(layout)

    def nowe(self):
        global numer
        self.numer = (self.listinput.text())


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    app.setStyle('Fusion')
    MW = Klient1()
    MW.show()

    sys.exit(app.exec_())
0

Znalazłem na tę chwilę jakiś pomysł więc chętnie się podzielę.

Mianowicie zastosowałem zapisywanie zawartości z pola linedit do dokumentu tekstowego.

        text_file = open('file1.txt', 'a+')
        with open('file1.txt', 'a+') as f:
            web_browsers = (wartosc)
            f.writelines("%s\n" % line for line in web_browsers)

            self.combobox.addItem(web_browsers)

Następnie przypisanie zawartości z dokumentu tekstowego do comboboxa.

        with open("file1.txt", "r") as f:
            lines = f.readlines()
            a = lines
            for i in a:
                self.combobox.addItem(i)

Poniżej zamieszczam cały kod, jeśli znacie jakieś lepsze praktyki to chętnie je przygarnę bo sam dopiero zaczynam zabawę z pythonem ;)

from PyQt5.QtWidgets import QLabel,QDialogButtonBox,QTableWidget, QTableWidgetItem, \
    QVBoxLayout, QPushButton, QAction, QLineEdit, QMessageBox, QDateEdit,QHBoxLayout, QGridLayout
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import QtWidgets, QtGui
class Klient1(QWidget):
    def __init__(self):
        super(Klient1, self).__init__()
        self.setWindowTitle("Klient")
        self.setFixedSize(300, 200)
        self.initUI()
    def initUI(self):


        self.combobox = QtWidgets.QComboBox(self)
        with open("file1.txt", "r") as f:
            lines = f.readlines()
            a = lines
            for i in a:
                self.combobox.addItem(i)
        # self.combobox.addItem(a)
        self.combobox.move(10,10)
        self.combobox.resize(100,25)
        self.btn = QtWidgets.QPushButton('otworz',self)
        self.btn.clicked.connect(self.add)
        self.btn.move(10,50)
        self.btn.resize(100,25)
    def add(self,nowe):
        global wartosc
        dodaj = Dodaj_zlecenie()
        dodaj.exec_()
        wartosc = (dodaj.numer)
        text_file = open('file1.txt', 'a+')
        with open('file1.txt', 'a+') as f:
            web_browsers = (wartosc)
            f.writelines("%s\n" % line for line in web_browsers)

            self.combobox.addItem(web_browsers)
        dodaj.show()
class Dodaj_zlecenie(QDialog):
    def __init__(self, *args, **kwargs):
        super(Dodaj_zlecenie, self).__init__(*args, **kwargs)
        self.QBtn = QPushButton()
        self.QBtn.setText("Dodaj")
        self.setWindowTitle("Dodaj do listy")
        self.setFixedWidth(300)
        self.setFixedHeight(100)
        self.QBtn.clicked.connect(self.nowe)
        layout = QVBoxLayout()
        self.listinput = QLineEdit()
        self.onlyInt = QIntValidator()
        self.listinput.setValidator(self.onlyInt)
        self.listinput.setPlaceholderText("Numer.")
        layout.addWidget(self.listinput)
        layout.addWidget(self.QBtn)
        self.setLayout(layout)
    def nowe(self):
        global numer
        self.numer = (self.listinput.text())
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    app.setStyle('Fusion')
    MW = Klient1()
    MW.show()
    sys.exit(app.exec_())
0

Jeśli chcesz zapisywać jakieś baardzo proste dane to może być i plik tekstowy. Jeśli coś bardziej złożonego to możesz z poziomu pythona skorzystać z pliku ini (QSettings), csv, excela, lub działać na bazie danych (chociażby SQLite).

1 użytkowników online, w tym zalogowanych: 0, gości: 1