Как задать нескольким значениям из QDoubleSpinBox уникальные переменные при их обновлении?
У меня есть отдельных .py файл с интерфейсом содержащий несколько QDoubleSpinBox.
Я написал отдельный функционал, который при изменении значения в виджете input_overall_1 присвоит это значение в переменную txt.
Как реализовать присвоение уникальных переменных для всех виджетов? Возможно через цикл и список, или как-то ещё.
import Inter_Input_Blasting as interf
from PyQt6 import QtCore,QtWidgets,QtGui
class MainWindow(QtWidgets.QMainWindow):
def on_clicked(self):
print("Button Pushed")
def __init__(self,parent=None):
super(MainWindow, self).__init__(parent)
self.ui = interf.Ui_MainWindow()
self.ui.setupUi(self)
self.ui.calc_button.clicked.connect(self.on_clicked)
self.ui.input_overall_1.valueChanged.connect(self.gather_data)
def gather_data(self):
txt = self.ui.input_overall_1.value()
print(txt)
if __name__== "__main__":
import sys
app = interf.QtWidgets.QApplication(sys.argv)
Form = MainWindow()
Form.show()
sys.exit(app.exec())
Также возможно кто-нибудь даст совет возможно ли реализовать в интерфейсе добавление виджетов или их удаление?
Интерейс Ui_MainWindow (использую QtDesigner):
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 480)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.input_overall_1 = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.input_overall_1.setAutoFillBackground(False)
self.input_overall_1.setWrapping(True)
self.input_overall_1.setFrame(True)
self.input_overall_1.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_1.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_1.setSpecialValueText("")
self.input_overall_1.setCorrectionMode(QtWidgets.QAbstractSpinBox.CorrectionMode.CorrectToPreviousValue)
self.input_overall_1.setPrefix("")
self.input_overall_1.setSuffix("")
self.input_overall_1.setMaximum(3000.99)
self.input_overall_1.setObjectName("input_overall_1")
self.gridLayout.addWidget(self.input_overall_1, 0, 0, 1, 1)
self.input_overall_2 = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.input_overall_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_2.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_2.setPrefix("")
self.input_overall_2.setSuffix("")
self.input_overall_2.setMaximum(3000.99)
self.input_overall_2.setObjectName("input_overall_2")
self.gridLayout.addWidget(self.input_overall_2, 1, 0, 1, 1)
self.input_overall_3 = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.input_overall_3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_3.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_3.setPrefix("")
self.input_overall_3.setSuffix("")
self.input_overall_3.setMaximum(3000.99)
self.input_overall_3.setObjectName("input_overall_3")
self.gridLayout.addWidget(self.input_overall_3, 2, 0, 1, 1)
self.calc_button = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12)
self.calc_button.setFont(font)
self.calc_button.setStyleSheet("background-color: rgb(213, 213, 213);")
self.calc_button.setObjectName("calc_button")
self.gridLayout.addWidget(self.calc_button, 3, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.calc_button.setText(_translate("MainWindow", "Расчёт"))
Ответы (2 шт):
Автор решения: Alexander Chernin
→ Ссылка
Например, при помощи такой щикарной вещицы как словарь
class MainWindow(QtWidgets.QMainWindow):
def __init__(self,parent=None):
#...
self.values = {} # или = dict()
# Здесь v - это новое значение из соответствующего QDoubleSpinBox
self.ui.input_overall_1.valueChanged.connect(lambda v: self.gather_data("overall_1", v))
self.ui.input_overall_2.valueChanged.connect(lambda v: self.gather_data("overall_2", v))
# и так далее
def gather_data(self, srcName, value):
self.values[srcName] = value
Автор решения: S. Nick
→ Ссылка
Попробуйте так
'''
from PyQt6 import QtCore, QtGui, QtWidgets
'''
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 480)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.input_overall_1 = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.input_overall_1.setAutoFillBackground(False)
self.input_overall_1.setWrapping(True)
self.input_overall_1.setFrame(True)
self.input_overall_1.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_1.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_1.setSpecialValueText("")
self.input_overall_1.setCorrectionMode(QtWidgets.QAbstractSpinBox.CorrectionMode.CorrectToPreviousValue)
self.input_overall_1.setPrefix("")
self.input_overall_1.setSuffix("")
self.input_overall_1.setMaximum(3000.99)
self.input_overall_1.setObjectName("input_overall_1")
self.gridLayout.addWidget(self.input_overall_1, 0, 0, 1, 1)
self.input_overall_2 = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.input_overall_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_2.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_2.setPrefix("")
self.input_overall_2.setSuffix("")
self.input_overall_2.setMaximum(3000.99)
self.input_overall_2.setObjectName("input_overall_2")
self.gridLayout.addWidget(self.input_overall_2, 1, 0, 1, 1)
self.input_overall_3 = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.input_overall_3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_3.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_3.setPrefix("")
self.input_overall_3.setSuffix("")
self.input_overall_3.setMaximum(3000.99)
self.input_overall_3.setObjectName("input_overall_3")
self.gridLayout.addWidget(self.input_overall_3, 2, 0, 1, 1)
self.calc_button = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12)
self.calc_button.setFont(font)
self.calc_button.setStyleSheet("background-color: rgb(213, 213, 213);")
self.calc_button.setObjectName("calc_button")
self.gridLayout.addWidget(self.calc_button, 3, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.calc_button.setText(_translate("MainWindow", "Расчёт"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.doubleSpinBoxs = self.findChildren(QtWidgets.QDoubleSpinBox)
#print(f'doubleSpinBoxs = {doubleSpinBoxs}')
for dsb in self.doubleSpinBoxs:
dsb.valueChanged.connect(
lambda val, dsb=dsb: self.gather_data(val, dsb))
self.calc_button.clicked.connect(self.on_clicked)
def on_clicked(self):
rez = 0
for dsb in self.doubleSpinBoxs:
rez += dsb.value()
print(f"Button Pushed: rez = {rez}")
def gather_data(self, val, dsb):
txt = dsb.value()
print(f'{dsb.objectName()}: {val} <----> {txt}')
if __name__== "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = MainWindow()
Form.show()
sys.exit(app.exec())
