Skip to content

Instantly share code, notes, and snippets.

@petfactory
Created January 13, 2015 07:36
Show Gist options
  • Save petfactory/d76a68aff55d4b0f60fe to your computer and use it in GitHub Desktop.
Save petfactory/d76a68aff55d4b0f60fe to your computer and use it in GitHub Desktop.
PySide tableview delegate test
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