読者です 読者をやめる 読者になる 読者になる

PyGTKでラジオボタンを使う

Python PyGTK

PyGTKでラジオボタンを使うにはRadioButtonクラスを使います。
ラジオボタンをグループ化する場合は、初期化時の一つめの引数に、一つ前のRadioButtonインスタンスを指定します。
ラジオボタンが選択中の場合、get_activeメソッドはTrueを返します。

gtk_radiobutton.py

# coding: utf-8
import pygtk
pygtk.require('2.0')
import gtk
import gobject


class MyApp(object):
    def __init__(self):
        self.window = gtk.Window()

        # ラジオボタン
        self.radiobutton1 = gtk.RadioButton(None, u'アイテム1')
        self.radiobutton2 = gtk.RadioButton(self.radiobutton1, u'アイテム2')
        self.radiobutton3 = gtk.RadioButton(self.radiobutton2, u'アイテム3')

        # ラジオボタンを囲む枠
        self.frame = gtk.Frame()
        # 枠内に横並び
        self.hbox = gtk.HBox(spacing=5)
        # ラジオボタンをボックスに追加
        self.hbox.add(self.radiobutton1)
        self.hbox.add(self.radiobutton2)
        self.hbox.add(self.radiobutton3)
        self.frame.add(self.hbox)

        # OKボタン
        self.button_ok = gtk.Button('OK')
        self.button_ok.connect('clicked', self.on_button_ok_clicked)

        # レイアウト用ボックス
        self.vbox = gtk.VBox()
        self.vbox.pack_start(self.frame, False, False, 10)
        self.vbox.add(self.button_ok)

        self.window.add(self.vbox)
        self.window.connect('delete-event', self.on_delete_event)

    def on_delete_event(self, window, event, data=None):
        """ウィンドウ閉じる
        """
        gtk.main_quit()
        return False

    def on_button_ok_clicked(self, widget, data=None):
        """ボタンクリック
        """
        self.messagebox(u'選択した内容は %s です。' % self.get_radiobutton_text())

    def get_radiobutton_text(self):
        """選択中のラジオボタンのテキストを返す
        """
        for radiobutton in self.radiobutton1.get_group():
            if radiobutton.get_active():
                return radiobutton.get_label()

    def messagebox(self, text):
        """メッセージボックス
        """
        dialog = gtk.MessageDialog(
            self.window,
            gtk.DIALOG_MODAL,
            gtk.MESSAGE_INFO,
            gtk.BUTTONS_OK,
            text,
        )
        dialog.run()
        dialog.destroy()

    def main(self):
        # 画面を表示してメインループに入る
        self.window.show_all()
        gtk.main()


if __name__ == '__main__':
    app = MyApp()
    app.main()

実行結果

$ python gtk_radiobutton.py