[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    [PyKDE] More Model/View QTableView/QTreeView questions
From:       "Kelly Burkhart" <kelly.burkhart () gmail ! com>
Date:       2007-01-31 19:21:08
Message-ID: fa1e4ce70701311121s3012173qf7356f2962a8fcfa () mail ! gmail ! com
[Download RAW message or body]

I'm continuing to experiment with model/view and have a couple of
additional questions for you experts.  Please see attached code.

1.  Is there a way, either from the tree view or the table view to
select arbitrary text from within a cell?  I.e. can I select just
'this text' from the middle cell in the right column?  It appears that
with setSelectionBehavior and setSelectionMode the finest granularity
I can get is to highlight an entire cell.  And it's not really
'selected' since I can't paste the text into another window.

2.  In the table view, how can I get rid of all of that padding
surrounding the text so that it looks more like the tree view?

Thank you,

-K

["tst_lv.py" (text/x-python)]

#!/usr/bin/env python

import sys
import os
from PyQt4 import QtGui, QtCore

class TstModel( QtCore.QAbstractTableModel ):
    
    def __init__( self ):
        QtCore.QAbstractTableModel.__init__(self)

        self._header = ( 'col0', 'col1', 'col2' )
        self._itemsToKeep = 10
        self._itemIdx = 0
        self._items = [ ('item0', 'item0', 'item0'),
                        ('how do','i select', 'just >this text< from this item'),
                        ('item2','item2','item2') ]

    def rowCount( self, parent ):
        return len(self._items)

    def columnCount( self, parent ):
        return len(self._header)

    def data( self, index, role ):
        if not index.isValid():
            return QtCore.QVariant()

        if role != QtCore.Qt.DisplayRole:
            return QtCore.QVariant()

        row = index.row()
        col = index.column()
        
        if row < 0 or row >= len(self._items) or \
               col < 0 or col >= len(self._header):
            return QtCore.QVariant()

        return QtCore.QVariant(self._items[row][col])

    def headerData( self, section, orientation, role ):
        if orientation == QtCore.Qt.Horizontal and \
               role == QtCore.Qt.DisplayRole:
            return QtCore.QVariant( self._header[section] )

        return QtCore.QVariant()

    def flags( self, index ):
        return QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled

class TstTreeView( QtGui.QTreeView ):
    def __init__( self, model ):
        QtGui.QTreeView.__init__(self)
        self.setWindowTitle('TstTreeView')
        self.setModel(model)
        self.setRootIsDecorated(False)
        self.setSortingEnabled(False)
        self.resize( 600, 200 )

class TstTableView( QtGui.QTableView ):
    def __init__( self, model ):
        QtGui.QTableView.__init__(self)
        self.setWindowTitle('TstTableView')
        self.setModel(model)
        self.setShowGrid( False )
        self.verticalHeader().hide()
        self.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
        self.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.ResizeToContents)
        self.horizontalHeader().setResizeMode(2, QtGui.QHeaderView.Stretch)
        self.resize( 600, 200 )

class Tst:
    def run( self ):
        app = QtGui.QApplication(sys.argv)
        tm = TstModel()
        tv1 = TstTreeView( tm )
        tv1.show()
        tv2 = TstTableView( tm )
        tv2.show()
        
        app.connect(app, QtCore.SIGNAL('lastWindowClosed()'), \
                    app, QtCore.SLOT('quit()'))
        sys.exit(app.exec_())

if __name__ == "__main__":
    tst = Tst()
    tst.run()



_______________________________________________
PyKDE mailing list    PyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic