标准Py
def criteria_change(row, col, new_value):
print "change at", row, col, "new_value:", new_value
class Criteria:
def __init__(self, row, col):
self.row, self.col = row, col
def on_change(self):
criteria_change(self.row, self.col, self.value())
叶思诺
from PyQt4.QtGui import *
from criteria import Criteria
class YesNoMaybe(Criteria):
def create_editor(self):
group_box = QGroupBox()
layout = QVBoxLayout()
group_box.setLayout(layout)
self.buttons = []
for s in ["yes", "no", "maybe"]:
button = QRadioButton(s)
self.buttons.append(button)
layout.addWidget(button)
button.toggled.connect(self.on_toggle)
return group_box
def on_toggle(self, is_now_on):
if is_now_on:
self.on_change()
def value(self):
for button in self.buttons:
if button.isChecked():
return button.text()
耶斯诺
from PyQt4.QtGui import QComboBox
from criteria import Criteria
class YesNo(Criteria):
def create_editor(self):
combo_box = self.combo_box = QComboBox()
for s in ["red", "blue"]:
combo_box.addItem(s)
combo_box.activated.connect(self.on_change)
return combo_box
def value(self):
return self.combo_box.currentText()
Me.Py
import sys
from PyQt4.QtGui import *
from yes_no_maybe import YesNoMaybe
from yes_no import YesNo
app = QApplication(sys.argv)
table_classes = [[YesNo, YesNo],
[YesNoMaybe, YesNoMaybe]]
table = QTableWidget(len(table_classes), len(table_classes[0]))
table.criteria = []
for r, cls_row in enumerate(table_classes):
criteria_row = []
table.criteria.append(criteria_row)
for c, criteria_cls in enumerate(cls_row):
criteria = criteria_cls(r, c)
criteria_row.append(criteria)
table.setCellWidget(r, c, criteria.create_editor())
table.setRowHeight(1, 100)
table.show()
app.exec_()