#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2016/11/09 16:48:49 +0900> u"""押したままの状態になるボタンを並べてツールパネル相当を作るテスト.""" import sys from PySide.QtCore import * # NOQA from PySide.QtGui import * # NOQA class ToolPanel(QWidget): u"""ツールパネル用Widget.""" button_clicked = Signal(int) # シグナルを用意 def __init__(self, *argv, **keywords): u"""初期化.""" super(ToolPanel, self).__init__(*argv, **keywords) self.grp = QButtonGroup() gb = QGridLayout() dt = [ (0, 0, 0, "Brush"), (1, 0, 1, "Erase"), (0, 1, 2, "Box"), (1, 1, 3, "Box Fill"), (0, 2, 4, "Select"), (1, 2, 5, "Fill"), ] for x, y, id, s in dt: btn = QPushButton(s, self) btn.setCheckable(True) # トグルボタンにする self.grp.addButton(btn, id) # グループ登録してラジオボタン風に使う gb.addWidget(btn, y, x) self.setLayout(gb) self.grp.setExclusive(True) # 排他的なボタン処理にする self.grp.button(0).setChecked(True) # 最初のボタンを押しておく self.grp.buttonClicked.connect(self.changed_button) def changed_button(self): u"""ボタンが押された時に呼ばれる処理.""" self.button_clicked.emit(self.grp.checkedId()) # シグナルを発生 def get_id(self): u"""選択状態(ID)を返す.""" return self.grp.checkedId() class MyMainWidget(QWidget): u"""メインウインドウ.""" def __init__(self, *argv, **keywords): u"""初期化.""" super(MyMainWidget, self).__init__(*argv, **keywords) self.tb = ToolPanel(self) self.tb.button_clicked.connect(self.changed_toolbox) self.lbl = QLabel("----", self) self.lbl.setText("ID=%d" % self.tb.get_id()) l = QVBoxLayout() l.addWidget(self.tb) l.addWidget(self.lbl) self.setLayout(l) def changed_toolbox(self, id): u"""ツールの選択状態が切り替わった時に呼ばれる処理.""" self.lbl.setText("ID=%d" % id) def main(): u"""メイン処理.""" app = QApplication(sys.argv) w = MyMainWidget() w.show() sys.exit(app.exec_()) if __name__ == '__main__': main()