Доброго времени суток! Столкнулся с такой проблемой, после закрытия окна и повторном его открытии все функции класса, при их вызове, начинают ложно срабатывать несколько раз, причем количество ложных срабатываний равно количеству закрытия окна (т.е. 2 раза закрыли окно, то после открытия функции сработают ложно 2 раза). Помогите решить проблему или скажите, что я не так делаю!
вот 2 класса, которые реализуют 2 окна:
from PyQt5 import QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from basedata import addCategory, getCategory, addProduct, getProduct
from structs import ProductStruct
class ProductList(QWidget):
def __init__(self):
super().__init__()
self.s = []
self.add_window = AddProduct(self)
self.exit = QPushButton('Выход')
self.new_product = QPushButton('Добавить товар')
self.supplier = QLabel()
self.lv = QListView()
self.table = QTableView()
self.sti = QStandardItemModel(parent=self.lv)
self.t = QStandardItemModel(parent=self.table)
self.grid = QGridLayout()
self.split = QSplitter(Qt.Horizontal)
self.hbox1 = QHBoxLayout()
self.hbox2 = QHBoxLayout()
self.vbox = QVBoxLayout()
def closeEvent(self, event):
self.sti.clear()
self.t.clear()
if event:
event.accept()
else:
self.close()
def on_click(self, s):
self.t.clear()
self.t = getProduct(self.s, s.indexes()[0].data())
self.t.setHorizontalHeaderLabels(['Название', 'Описание', 'Цена'])
self.table.setModel(self.t)
def view_add_window(self):
self.add_window.view()
def view(self, supplier):
self.setGeometry(400, 100, 635, 300)
self.setWindowIcon(QIcon('./Icon/edit1'))
self.setWindowTitle('Постовляемый товар')
self.setWindowModality(Qt.ApplicationModal)
self.s = supplier
self.supplier.setText('Поставщик ' + supplier)
self.supplier.setFont(QFont('Calibry', 12))
self.supplier.setAlignment(QtCore.Qt.AlignHCenter)
self.new_product.clicked.connect(self.add_window.view)
self.exit.clicked.connect(self.close)
arr = getCategory()
if arr != '':
self.sti = arr
self.split.addWidget(self.lv)
self.split.addWidget(self.table)
self.grid.addWidget(self.supplier, 0, 1)
self.grid.addWidget(self.split, 1, 0, 1, 3)
self.grid.addWidget(self.new_product, 2, 0)
self.grid.addWidget(self.exit, 2, 2)
self.t.setHorizontalHeaderLabels(['Название', 'Описание', 'Цена'])
self.table.setModel(self.t)
self.lv.setModel(self.sti)
self.lv.selectionModel().selectionChanged.connect(self.on_click)
self.setLayout(self.grid)
self.show()
class AddProduct(QWidget):
def __init__(self, w):
super().__init__()
self.window = w
self.add = QPushButton('Добавить')
self.add_category = QPushButton('Добавить категорию')
self.cancel = QPushButton('Отмена')
self.name = QLabel('Название')
self.name_text = QLineEdit()
self.characteristic = QLabel('Характеристика')
self.characteristic_text = QTextEdit()
self.price = QLabel('Цена (руб.)')
self.price_text = QLineEdit()
self.category = QLabel('Категории')
self.category_list = QComboBox()
self.category_item_model = QStandardItemModel(parent=self.category_list)
self.grid = QGridLayout()
def closeEvent(self, event):
if event:
self.clearFields()
event.accept()
else:
self.clearFields()
self.close()
def addCategory(self):
category, ok = QInputDialog.getText(self, 'Добавление категории',
'Введите категорию')
if ok:
self.category_list.addItem(category)
addCategory(category)
item = QStandardItem(category)
self.window.sti.appendRow(item)
def clearFields(self):
self.category_list.clear()
self.name_text.clear()
self.characteristic_text.clear()
self.price_text.clear()
def addProduct(self):
ok = QMessageBox.question(self, 'Внимание!', 'Вы уверены, что хотите добавить данный товар?',
QMessageBox.No | QMessageBox.Yes)
if ok == QMessageBox.Yes:
p = ProductStruct(self.category_list.currentText(), self.window.s, self.name_text.text(),
self.characteristic_text.toPlainText(), self.price_text.text())
print(self.category_list.currentText())
addProduct(p)
self.closeEvent()
def view(self):
self.setGeometry(400, 100, 500, 300)
self.setWindowIcon(QIcon('./Icon/edit1'))
self.setWindowTitle('Новый товар')
self.setWindowModality(Qt.ApplicationModal)
self.add_category.clicked.connect(self.addCategory)
self.add.clicked.connect(self.addProduct)
self.cancel.clicked.connect(self.closeEvent)
arr = getCategory()
if arr != '':
self.category_item_model = arr
self.grid.addWidget(self.category, 0, 0)
self.grid.addWidget(self.category_list, 0, 1)
self.grid.addWidget(self.add_category, 0, 2)
self.grid.addWidget(self.name, 2, 0)
self.grid.addWidget(self.name_text, 2, 1, 1, 2)
self.grid.addWidget(self.characteristic, 3, 0)
self.grid.addWidget(self.characteristic_text, 3, 1, 3, 2)
self.grid.addWidget(self.price, 6, 0)
self.grid.addWidget(self.price_text, 6, 1, 1, 2)
self.grid.addWidget(self.add, 8, 0)
self.grid.addWidget(self.cancel, 8, 2)
self.category_list.setModel(self.category_item_model)
self.setLayout(self.grid)
self.show()