Hello World / plɹoM ollǝH

Programmers Live in Vain

QComboboxにはOrderedDictが良さげ

Comboboxのインデックスと処理が1:1だと便利

dictは追加した要素を不定の順序でイテレートするので

挿入順を保存したい場合は OrderedDict を使う

f:id:dungeonneko:20160206021014g:plain

# conding: utf-8
import sys
from PySide.QtCore import *
from PySide.QtGui import *
import collections

# entry point
if __name__ == '__main__':
    myapp = QApplication(sys.argv)
    widget = QWidget()
    layout = QHBoxLayout(widget)
    lhs = QSpinBox()
    ope = QComboBox()
    rhs = QSpinBox()
    btn = QPushButton('Calc')
    ans = QLabel('???')

    widget.setLayout(layout)
    layout.addWidget(lhs)
    layout.addWidget(ope)
    layout.addWidget(rhs)
    layout.addWidget(btn)
    layout.addWidget(ans)

    # 辞書に追加した順序が保持される
    operators = collections.OrderedDict((
        ('Add', lambda x, y : x + y),
        ('Sub', lambda x, y : x - y),
        ('Mul', lambda x, y : x * y),
        ('Div', lambda x, y : x / y),
    ))

    # コンボボックスに追加
    ope.addItems(list(operators.keys()))

    # 計算ボタンがおされたときの処理
    def calc():
        x = operators[ ope.currentText() ](lhs.value(), rhs.value())
        ans.setText(str(x))

    # ボタン押下イベントに接続
    btn.clicked.connect(calc)

    widget.show()
    sys.exit(myapp.exec_())