Обработка нажатия кнопки без создания функции
В программе требуется, в случае нажатия на определенную кнопку, присвоить переменной значение.
Сейчас это выглядит так:
class mywindow(QtWidgets.QMainWindow):
def __init__(self):
global price
super(mywindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.rb_Meat.toggled.connect(Meat)
self.ui.rb_Emuls.toggled.connect(Emuls)
...
def Meat():
global price
price = 10
def Emuls():
global price
price = 20
Можно ли как-то упростить данный код? Например не создавать функции....
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Как вариант.
Класс QButtonGroup предоставляет контейнер для организации групп виджетов-кнопок.
from PyQt5 import QtWidgets, QtCore
class RadioButton(QtWidgets.QWidget):
def __init__(self):
super(). __init__()
self.setWindowTitle("Radio Button")
self.price = None # !!!
self.rb_1 = QtWidgets.QRadioButton("Овощи")
self.rb_2 = QtWidgets.QRadioButton("Фрукты")
self.rb_3 = QtWidgets.QRadioButton("Мясо")
self.rb_4 = QtWidgets.QRadioButton("Молоко")
buttons = ( # vvvv <---------------------------- цена в копейках
(self.rb_1, 1012),
(self.rb_2, 220),
(self.rb_3, 3000),
(self.rb_4, 4001),
)
vbox = QtWidgets.QVBoxLayout(self)
self.optionGroup = QtWidgets.QButtonGroup() # !!!
for button, id in buttons:
vbox.addWidget(button)
self.optionGroup.addButton(button, id)
# для Qt >= 5.15: # !!! # for Qt>=5.15:
# self.optionGroup.idToggled.connect(self.getvalue) # !!!
# иначе если Qt < 5.15: # !!!
self.optionGroup.buttonToggled[int, bool].connect(self.getvalue) # !!!
def getvalue(self, id, checked): # !!!
if checked:
button = self.optionGroup.button(id)
self.price = f"{id*0.01:>7.2f}"
print(f"{button.text():>7} is checked, price = {self.price}")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = RadioButton()
w.show()
sys.exit(app.exec_())
