PyQt ラジオボタン

PyQt ラジオボタン

仕様

  • フォームなどで選択するときを想定
  • ボタンは2つ
  • ボタンをクリックすると、そちらのボタンについての情報が表示される

普通のラジオボタンです。

ソースコード

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
	def setupUi(self, Form):
		Form.setObjectName("Form")
		Form.resize(600, 600)
		font = QtGui.QFont()
		font.setPointSize(20)
		font.setBold(True)
		self.label = QtWidgets.QLabel(Form)
		self.label.setGeometry(QtCore.QRect(100, 100, 150, 100))
		self.label_ans = QtWidgets.QLabel(Form)
		self.label_ans.setGeometry(QtCore.QRect(300, 100, 250, 100))
		self.label_ans.setFont(font)
		self.radio1 = QtWidgets.QRadioButton(Form)
		self.radio1.setGeometry(QtCore.QRect(100, 200, 200, 100))
		self.radio2 = QtWidgets.QRadioButton(Form)
		self.radio2.setGeometry(QtCore.QRect(100, 300, 200, 100))

		self.retranslateUi(Form)
		self.radio1.clicked.connect(Form.click)
		self.radio2.clicked.connect(Form.click)

	def retranslateUi(self, Form):
		_translate = QtCore.QCoreApplication.translate
		Form.setWindowTitle(_translate("Form", "Form"))
		self.label.setText(_translate("Form", "あなたの推しは?"))
		self.radio1.setText(_translate("Form", "河田 陽菜"))
		self.radio2.setText(_translate("Form", "久保 史緒里"))
	
class main(QtWidgets.QDialog):
	def __init__(self,parent=None):
		super(main, self).__init__(parent)
		self.ui = Ui_Form()
		self.ui.setupUi(self)

	def click(self):
		radio_clicked_now = self.sender()
		self.ui.label_ans.setText(radio_clicked_now.text())

if __name__ == '__main__':
	app = QtWidgets.QApplication(sys.argv)
	window = main()
	window.show()

	sys.exit(app.exec_())

解説

self.radio1.clicked.connect(Form.click)
self.radio2.clicked.connect(Form.click)

上記のコードで両方のボタンをclickという関数に紐づけているのがわかります。
今回のポイントはこの関数です。

def click(self):
	radio_clicked_now = self.sender()
	self.ui.label_ans.setText(radio_clicked_now.text())

click()ではQtWidgetsのsenderメソッドを使っています。
senderメソッドを使用すると、直前にシグナルを送ったウィジェットの情報を知ることができます。

radio_clicked_nowは押されたラジオボタンの情報を持つということです。

isChecked()で状態を確認しているものを以前見かけた気がしますが必要ないので省いています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です