Created
January 13, 2015 07:36
-
-
Save petfactory/d76a68aff55d4b0f60fe to your computer and use it in GitHub Desktop.
PySide tableview delegate test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PySide import QtCore, QtGui | |
from shiboken import wrapInstance | |
import maya.OpenMayaUI as omui | |
def maya_main_window(): | |
main_window_ptr = omui.MQtUtil.mainWindow() | |
return wrapInstance(long(main_window_ptr), QtGui.QWidget) | |
class MyDelegate(QtGui.QItemDelegate): | |
def __init__(self, parent=None): | |
super(MyDelegate, self).__init__(parent) | |
def createEditor(self, parent, option, index): | |
column = index.column() | |
if column == 0: | |
spinbox = QtGui.QDoubleSpinBox(parent) | |
spinbox.setRange(.05,999) | |
spinbox.setDecimals(3) | |
spinbox.setAlignment(QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) | |
return spinbox | |
elif column == 1: | |
lineedit = QtGui.QLineEdit(parent) | |
return lineedit | |
# the main ui class | |
class TableviewTest(QtGui.QWidget): | |
def __init__(self, parent=None): | |
super(TableviewTest, self).__init__(parent) | |
self.setWindowFlags(QtCore.Qt.Tool) | |
self.resize(300, 350) | |
self.setWindowTitle("Tableview") | |
self.vertical_layout = QtGui.QVBoxLayout() | |
self.setLayout(self.vertical_layout) | |
# tableview | |
self.tableview = QtGui.QTableView() | |
self.tableview.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) | |
self.vertical_layout.addWidget(self.tableview) | |
self.tableview.setItemDelegate(MyDelegate(self.tableview)) | |
# model | |
self.model = QtGui.QStandardItemModel() | |
self.model.setHorizontalHeaderLabels(['float', 'string']) | |
self.tableview.setModel(self.model) | |
self.model.dataChanged.connect(self.model_changed) | |
for row in range(5): | |
item = QtGui.QStandardItem() | |
item.setData(1.0, QtCore.Qt.EditRole) | |
self.model.setItem(row, 0, item); | |
def model_changed(self, top_left, bottom_right): | |
print('model changed') | |
val = self.model.data(top_left) | |
selection_model = self.tableview.selectionModel() | |
column = top_left.column() | |
# returns QModelIndex | |
#selected_rows = selection_model.selectedRows() | |
selected_indexes = selection_model.selectedIndexes() | |
self.model.blockSignals(True) | |
for index in selected_indexes: | |
# only change the items with the same col as the one edited | |
if index.column() != column: | |
continue | |
self.model.setData(index, val) | |
self.model.blockSignals(False) | |
#self.tableview.viewport().update() | |
try: | |
win.close() | |
except NameError as e: | |
print(e) | |
win = TableviewTest(parent=maya_main_window()) | |
win.move(100, 210) | |
win.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment