Как добавленным в процессе работы приложения элементам присвоить выполнение функции?
В программе планируется получать список с наименованиями (из БД), по которым будет вкладками заполняться QTabWidget
. При клике на одну из вставленных вкладок должна вызываться какая-либо функция (например, функция отображения имени вкладки; запроса к БД с названием вкладки или просто какого-либо текста).
Пытаюсь создать таким образом фильтр. Если с заранее созданным интерфейсом ясно как прикрутить сигналы ко вкладкам и вызывать функции при клике, то вот как сделать это в зависимости от прочитанных данных - непонятно... Есть идея сделать вкладок 10, скрыть их, а в зависимости от прочитанных данных менять названия и делать видимыми. Возможно ли обойтись без такого костыля?
В коде ниже создан tabwidget
и есть список, которыми нужно дополнить его. Список может изменяться.
main.py
import sys
from PyQt5 import QtWidgets
from ui import untitled
class MainWindow(QtWidgets.QMainWindow, untitled.Ui_Form):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.tabs = ["sun", "moon", "weather"] # может меняться как кол-во, так и названия
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
untitled.py (конвертировал из .ui в .py)
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(706, 350)
self.tabWidget = QtWidgets.QTabWidget(Form)
self.tabWidget.setGeometry(QtCore.QRect(140, 90, 361, 151))
self.tabWidget.setStyleSheet("background-color: rgb(85, 0, 127)")
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.tabWidget.addTab(self.tab, "")
self.retranslateUi(Form)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Form", "All"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())