Обновление виджетов главного окна
В версии программы на tkInter все работает хорошо. Я решил перенести код на PyQt и столкнулся с рядом проблем. Сейчас вопрос в следующем - не обновляются виджеты главного окна программы.
Код главного окна
class Software(QtWidgets.QMainWindow):
def __init__(self):
super(Software, self).__init__()
self.MW = Ui_MainWindow()
self.MW.setupUi(self)
###
self.db = DB() # Класс работы с БД
self.viewItem() # Функция просмотра Item в TableWidget
def viewItem(self):
self.MW.table.clear()
self.db.c.execute('SELECT name FROM item')
result = self.db.c.fetchall()
###
self.MW.table.setRowCount(0)
for row, kvoRow in enumerate(result):
self.MW.table.insertRow(row)
for column, item in enumerate(kvoRow):
self.MW.table.setItem(row, column, QTableWidgetItem(str(item)))
# .....
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Software()
window.show()
app.exec_()
Из главного окна по нажатию кнопки открывается диалоговое окно с вводом нового названия, записью в БД и обратным вызовом функции главного окна viewItem
class Item(QtWidgets.QDialog):
def __init__(self, selector): # selector переключает Update|Insert в sqlite
# в зависимости от нажатой кнопки
super(Item, self).__init__()
self.selector = selector
self.MWI = Software()
self.db = DB()
self.diaItem()
self.exec_()
# ...
def saveToBase(self):
self.db.c.execute('INSERT INTO item (name) values (?)', (self.nameItem.text(),))
# self.db.conn.commit()
self.MWI.viewItem() <----- Переходит назад в функцию класса Software, но таблица не отображает
новое значение
self.close()
То есть при запуске программы все ОК, но новое добавленное значение не отображается сразу в таблице. Помогает либо перезапуск программы, либо нажатие кнопки главного окна Отменить выборку, которая инициирует сигнал к тому же
viewItem (self.MW.butCancelItem.clicked.connect(self.viewItem) )
Как заставить таблице сразу отображать новое значение? Перечитал уже уйму страниц про parent и child, но яснее не стало.