2017-12-03 8 views
0

QButtonGroupを作成しました(コード内に未使用のアーティファクトが存在する可能性がありますので無視してください)。私はすべてのチェックされたラジオボタンのIDを取得したいと思います。しかし、QButtonGroup.checkedId()は、一度に1つのボタンだけを返します。QT QButtonGroup.checkedId()はチェックされたボタンを1つだけ返します

チェックされているすべてのラジオボタンのリストを取得できますか?

import sys 
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QWidget, QAction, QTabWidget, QVBoxLayout,\ 
          QHBoxLayout, QGridLayout, QSplitter, QFrame, QTextEdit, QFileDialog, QGroupBox,\ 
          QButtonGroup, QLabel, QRadioButton 


class MyRadioButtonGroup(QWidget): 
    """ 
    creates radio buttons from a list 
    """ 
    def __init__(self, label, instructions, name_list): 
     super().__init__() 
     self.title_label = QLabel(label) 
     self.name_list = name_list 

     # create the widget 
     self.layout = QVBoxLayout() 
     self.group_box = QGroupBox(instructions) 
     self.button_group = QButtonGroup() 
     self.button_group.setExclusive(False) 

     # create the buttons 
     self.button_list = [QRadioButton(item) for item in self.name_list] 

     self.button_layout = QVBoxLayout() 

     for i, button in enumerate(self.button_list): 
      self.button_layout.addWidget(button) 
      self.button_group.addButton(button) 
      self.button_group.setId(button, i) 

     self.group_box.setLayout(self.button_layout) 

     # create the main layout 
     self.main_layout = QVBoxLayout() 
     self.main_layout.addWidget(self.title_label) 
     self.main_layout.addWidget(self.group_box) 

     self.setLayout(self.main_layout) 

     # method for getting the state of the buttons 

    def get_states(self): 
     states = self.button_group.checkedId() 
     return states 

class MainApp(QMainWindow): 
    """ This creates the main Window and configures its look 
    """ 
    def __init__(self): 
     ''' 
     Initializes the class with standard parameters 
     ''' 
     super().__init__() 
     self.title = 'Data Analysis App' 

     # start at top left corner of the screen 
     self.left = 0 
     self.top = 0 

     # set the window height and width 
     self.width = 1280 
     self.height = 780 

     # set the styles of fonts etc. 
     self.setStyleSheet('font-size: 16pt') 

     # call the makeUI method 
     self.makeUI() 

    def makeUI(self): 
     # set window geometry 
     self.setWindowTitle(self.title) 
     self.setGeometry(self.left, self.top, self.width, self.height) 

     # generate the tab layout 
     self.table_widget = MyTableWidget() 
     self.setCentralWidget(self.table_widget) 

     # apparently we have to call the show method in order to show it 
     self.show() 

class MyTableWidget(QWidget): 
    """ 
    Initializes the tab layout 
    """ 

    def __init__(self): 
     super().__init__() 
     self.layout = QVBoxLayout(self) 

     # initialize the tab screens 
     self.tabs = QTabWidget() 

     # add the tab screens to the tab widget 
     self.tabs.resize(600, 600) 

     # make the layout of the tabs 
     self.make_tab1() 

     # initialize the tabs 
     self.layout.addWidget(self.tabs) 
     self.setLayout(self.layout) 

    def make_tab1(self): 
     """Style of tab 1 is created here""" 

     '''Defines master layout of tab1''' 
     tab1 = QWidget() 
     tab1.layout = QHBoxLayout() 

     '''Button Section''' 

     # converts the data into excel and pandas dataframe 
     btn_test = QPushButton('Test') 
     btn_test.clicked.connect(self.test) 

     name_list = ['A', 'B', 'C'] 
     self.radio_buttons = MyRadioButtonGroup('TEST', 'Check more than one', name_list) 

     '''Page layout section ''' 

     tab1.layout.addWidget(btn_test) 
     tab1.layout.addWidget(self.radio_buttons) 
     tab1.setLayout(tab1.layout) 
     self.tabs.addTab(tab1, 'Test Radio Buttons') 

    ''' Methods section 
    ''' 
    def test(self): 
     print(self.radio_buttons.get_states()) 


if __name__ == '__main__': 
    """ This code block is always the same and makes sure that e.g. STRG+C kills the window etc. 
    """ 
    app = QApplication(sys.argv) 
    ex = MainApp() 
    sys.exit(app.exec()) 

答えて

2

あなただけのリスト内包でそれらを取得することができます:あなたとeyllanescは私の週末を保存している

def test(self): 
    print([i for i, button in enumerate(self.radio_buttons.button_group.buttons()) if button.isChecked()]) 
+0

。 – Moritz

+0

助けてくれてうれしいです:) – erocoar

+0

私はちょうど同じ解決策を見つけようとしていました。私はそれをゆっくりとしていることを見てニース – Moritz

関連する問題