PyQt5を使ってみる(2) ラジオボタン

環境

Windows 10 Pro(CPU only)
Python 3.7.5

バージョン

cycler==0.10.0
kiwisolver==1.1.0
matplotlib==3.1.1
numpy==1.17.4
pandas==0.25.3
pyparsing==2.4.5
PyQt5==5.13.2
PyQt5-sip==12.7.0
python-dateutil==2.8.1
pytz==2019.3
six==1.13.0

本文

CSVファイルを読み込んでラジオボタンの初期値にセットする。
冗長なコードだがシンプルで分かりやすく書いた。

  • コード
import sys
import pandas as pd
from PyQt5 import QtCore
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import *

'''
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib import pyplot as plt
import numpy as np
'''

class Window(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        self.setWindowTitle("PyQt5 sample")
        self.setGeometry(50, 50, 660, 660)

        self.button1 = QPushButton('Select File', self)
        self.button1.setGeometry(QtCore.QRect(20, 20, 100, 30))
        self.button1.clicked.connect(self.showDialog1)

        self.file_name = QLabel(self)
        self.file_name.setGeometry(130,20,400,30)
        self.file_name.setFrameStyle(QFrame.Box | QFrame.Plain)
        self.file_name.setFont(QFont('Meiryo',12))

        self.ESA_label = QLabel(self)
        self.ESA_label.setGeometry(130,60,400,30)
        self.ESA_label.setFrameStyle(QFrame.Box | QFrame.Plain)
        self.ESA_label.setFont(QFont('Meiryo',12))

        self.Fe_label = QLabel(self)
        self.Fe_label.setGeometry(130,100,400,30)
        self.Fe_label.setFrameStyle(QFrame.Box | QFrame.Plain)
        self.Fe_label.setFont(QFont('Meiryo',12))

        ESA_yoko = 100
        ESA_tate = 200

        Fe_yoko = 300
        Fe_tate = 200

        self.Fe_yes = QRadioButton('あり', self)
        self.Fe_yes.setFocusPolicy(QtCore.Qt.NoFocus)
        self.Fe_yes.setGeometry(Fe_yoko, Fe_tate, 100, 25)
        self.Fe_yes.setFont(QFont('Meiryo',14))
        
        self.Fe_no = QRadioButton('なし', self)
        self.Fe_no.setFocusPolicy(QtCore.Qt.NoFocus)
        self.Fe_no.setGeometry(Fe_yoko, Fe_tate + 40, 100, 25)
        self.Fe_no.setFont(QFont('Meiryo',14))

        self.groupFe = QButtonGroup()
        self.groupFe.addButton(self.Fe_yes, 1)
        self.groupFe.addButton(self.Fe_no, 0)
        
        self.ESA0 = QRadioButton('なし', self)
        self.ESA0.setFocusPolicy(QtCore.Qt.NoFocus)
        self.ESA0.setGeometry(ESA_yoko, ESA_tate, 100, 25)
        self.ESA0.setFont(QFont('Meiryo',14))

        self.ESA5 = QRadioButton('5μg', self)
        self.ESA5.setFocusPolicy(QtCore.Qt.NoFocus)
        self.ESA5.setGeometry(ESA_yoko, ESA_tate + 30, 100, 25)
        self.ESA5.setFont(QFont('Meiryo',14))

        self.ESA10 = QRadioButton('10μg', self)
        self.ESA10.setFocusPolicy(QtCore.Qt.NoFocus)
        self.ESA10.setGeometry(ESA_yoko, ESA_tate + 60, 100, 25)
        self.ESA10.setFont(QFont('Meiryo',14))
        
        self.ESA20 = QRadioButton('20μg', self)
        self.ESA20.setFocusPolicy(QtCore.Qt.NoFocus)
        self.ESA20.setGeometry(ESA_yoko, ESA_tate + 90, 100, 25)
        self.ESA20.setFont(QFont('Meiryo',14))

        self.ESA30 = QRadioButton('30μg', self)
        self.ESA30.setFocusPolicy(QtCore.Qt.NoFocus)
        self.ESA30.setGeometry(ESA_yoko, ESA_tate + 120, 100, 25)
        self.ESA30.setFont(QFont('Meiryo',14))

        self.ESA40 = QRadioButton('40μg', self)
        self.ESA40.setFocusPolicy(QtCore.Qt.NoFocus)
        self.ESA40.setGeometry(ESA_yoko, ESA_tate + 150, 100, 25)
        self.ESA40.setFont(QFont('Meiryo',14))

        self.ESA60 = QRadioButton('60μg', self)
        self.ESA60.setFocusPolicy(QtCore.Qt.NoFocus)
        self.ESA60.setGeometry(ESA_yoko, ESA_tate + 180, 100, 25)
        self.ESA60.setFont(QFont('Meiryo',14))

        self.ESA_list = [0,5,10,20,30,40,60]
        self.Fe_list = ['なし', 'あり']

        self.groupESA = QButtonGroup()
        self.groupESA.addButton(self.ESA0, 0)
        self.groupESA.addButton(self.ESA5, 1)
        self.groupESA.addButton(self.ESA10, 2)
        self.groupESA.addButton(self.ESA20, 3)
        self.groupESA.addButton(self.ESA30, 4)
        self.groupESA.addButton(self.ESA40, 5)
        self.groupESA.addButton(self.ESA60, 6)

        for button in self.groupESA.buttons():
            button.clicked.connect(self.clicked)
        
        for button in self.groupFe.buttons():
            button.clicked.connect(self.clicked)

    def showDialog1(self):

        fname = QFileDialog.getOpenFileName(self, 'Select File')

        if fname[0]:
            self.file_name.setText(fname[0])
            df = pd.read_csv(fname[0], index_col=0)
            self.groupFe.button(df.Fe[-1]).setChecked(True)
            self.groupESA.button(self.ESA_list.index(df.ESA[-1])).setChecked(True)

            self.clicked()
            
    def clicked(self):
        ESA = self.groupESA.checkedId()
        self.ESA_label.setText(str(self.ESA_list[ESA]))

        Fe = self.groupFe.checkedId()
        self.Fe_label.setText(self.Fe_list[Fe])

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex =Window()
    ex.show()
    sys.exit(app.exec_())