Foros del Web » Programando para Internet » Python »

QTreeView =)

Estas en el tema de QTreeView =) en el foro de Python en Foros del Web. hola buenos dias.... estoy haciendo un treeview con pyqt.... ya lo tengo listo, la cosa es que no se como asignarle un nombre predefinido al ...
  #1 (permalink)  
Antiguo 09/03/2011, 09:37
 
Fecha de Ingreso: enero-2011
Mensajes: 32
Antigüedad: 13 años, 3 meses
Puntos: 0
QTreeView =)

hola buenos dias....
estoy haciendo un treeview con pyqt....
ya lo tengo listo, la cosa es que no se como asignarle un nombre predefinido al primer elemento de mi arbol (raiz)....
supongamos que mi treview es:

grupos
grupo1
grupo2

el nombre grupos es el que necesito que se cargue junto con la ventana al abrirla.....
Podria alguien por favor ayudarme????

Nota:
mi ventana contiene el treview mas un tableview por lo que los estoy trabajando con dos modelos distintos =)
  #2 (permalink)  
Antiguo 09/03/2011, 21:22
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: QTreeView =)

Muestra código, que si no no sabremos cómo sugerirte modificaciones

Por ejemplo, con un treewidget podés hacer esto:

Código Python:
Ver original
  1. header = self.tree_widget.headerItem()
  2.         header.setText(0, "Cabecera")
  3.         header.font(0).setWeight(QtGui.QFont.Bold)

(donde tree_widget es un QTreeWidget)
  #3 (permalink)  
Antiguo 10/03/2011, 06:40
 
Fecha de Ingreso: enero-2011
Mensajes: 32
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: QTreeView =)

Bien!!!
he aqui una muestra de mi codigo....
pues creo que lo que ud me esta mostrando ya lo tengo hecho =)
Quiza no me explique bien.....



Código Python:
Ver original
  1. from PyQt4 import QtCore, QtGui
  2. from PyQt4.QtCore import SIGNAL, Qt, QString, QSignalMapper, SIGNAL, SLOT
  3. from PyQt4.QtGui import QWidget, QSortFilterProxyModel, \
  4.     QAbstractItemView, QMenu, QStandardItemModel
  5. from Proyect.presentation.view.ui_Groups import Ui_Groups
  6. from Proyect.presentation.model.standard_model import StandardModel
  7. from Proyect.presentation.config.tree_menu import ElementType, tree_menu
  8.  
  9. class Groups(QWidget):
  10.     '''
  11.    classdocs
  12.    '''
  13.  
  14.     def __init__(self, parent=None, flags=0):
  15.         '''
  16.        Constructor
  17.        '''
  18.         QWidget.__init__(self)
  19.         self.ui = Ui_Groups()
  20.         self.ui.setupUi(self)
  21.        
  22.         if parent is not None:
  23.             self.setParent(parent)
  24.        
  25.         self.model = None
  26.  
  27.         self.og_domain = None
  28.         self.menu = None
  29.        
  30.         self.menu_signal = None
  31.         self.sort_model = None
  32.                
  33.         self.load_component()
  34.         self.load_connection()
  35.        
  36.     def load_connection(self):
  37.         '''
  38.        '''
  39.         self.connect(self.ui.btn_add, SIGNAL("clicked()"), self.new_row)
  40.         self.connect(self.ui.btn_delete, SIGNAL("clicked()"), self.delete_row)
  41.         self.connect(self.ui.btn_cancel, SIGNAL("clicked()"), self.cancel)
  42.         self.connect(self.ui.btn_save, SIGNAL("clicked()"), self.save)
  43.        
  44.         ""
  45.         self.connect(self.ui.tree_view, SIGNAL("customContextMenuRequested(const QPoint &)"), self.show_menu)
  46.        
  47.     def load_component(self):
  48.        
  49.         '''
  50.        Modelo del Arbol
  51.        '''
  52.         self.model = StandardModel()
  53.         self.model.setRowCount(1)
  54.        
  55.         headers = [self.trUtf8("Grupos"), self.trUtf8("Descripción")]
  56.        
  57.         self.model.setHorizontalHeaderLabels(headers)
  58.        
  59.         self.sort_model = QSortFilterProxyModel()
  60.         self.sort_model.setSourceModel(self.model)
  61.        
  62.         self.ui.table_view.setModel(self.sort_model)
  63.         self.ui.table_view.resizeColumnsToContents()
  64.         self.ui.table_view.setSelectionBehavior(QAbstractItemView.SelectRows)
  65.         self.ui.table_view.setSortingEnabled(True)
  66.        
  67.         i = 0
  68.         while i < 2:
  69.             self.ui.table_view.setColumnHidden(i, True)
  70.             i += 1
  71.         self.ui.tree_view.setModel(self.sort_model)
  72.         self.ui.tree_view.setSortingEnabled(True)
  73.         self.ui.tree_view.setContextMenuPolicy(Qt.CustomContextMenu)
  74.          
  75.         '''
  76.        Modelo de la tabla
  77.        '''
  78.        
  79.         self.modelo = StandardModel()
  80.         self.modelo.setRowCount(1)
  81.        
  82.         headers1 = [  "Grupo", "       Usuario         ","    Nombre y Apellido         ",self.trUtf8("Identificación")]
  83.         self.modelo.setHorizontalHeaderLabels(headers1)
  84.        
  85.         self.sort_model = QSortFilterProxyModel()
  86.         self.sort_model.setSourceModel(self.modelo)
  87.        
  88.         self.ui.table_view.setModel(self.sort_model)
  89.         self.ui.table_view.resizeColumnsToContents()
  90.         self.ui.table_view.setSelectionMode(QAbstractItemView.SingleSelection)
  91.         self.ui.table_view.setSelectionBehavior(QAbstractItemView.SelectRows)
  92.         self.ui.table_view.setSortingEnabled(True)
  93.  
  94.  
  95.         i = 5
  96.         while i < len(headers):
  97.             self.ui.table_view.setColumnHidden(i, True)
  98.             i += 1
  99.            
  100.         self.ui.table_view.setModel(self.sort_model)
  101.         self.ui.table_view.setSortingEnabled(True)
  102.         self.ui.table_view.setContextMenuPolicy(Qt.CustomContextMenu)
  103.    
  104.          
  105.            
  106.     def insertChild(self):  #Funcion que permite crear los pozos
  107.         index = self.ui.tree_view.selectionModel().currentIndex()
  108.         model = self.ui.tree_view.model()
  109.  
  110.         if model.columnCount(index) == 0:
  111.            
  112.             if not model.insertColumn(0, index):
  113.                
  114.                 return
  115.  
  116.         if not model.insertRow(0, index):
  117.             return
  118.  
  119.         for column in range(model.columnCount(index)):
  120.             child = model.index(0, column, index)
  121.             model.setData(child, "[No data]", QtCore.Qt.EditRole)
  122.            
  123.             if model.headerData(column, QtCore.Qt.Horizontal) is None:
  124.                 model.setHeaderData(column, QtCore.Qt.Horizontal,
  125.                         "[No header]", QtCore.Qt.EditRole)
  126.  
  127.         self.ui.tree_view.selectionModel().setCurrentIndex(model.index(0, 0, index),
  128.                 QtGui.QItemSelectionModel.ClearAndSelect)
  129.    
  130.     def new_row(self):  #Funcion que permite insetar nueva fila
  131.         '''
  132.        '''
  133.         self.model.setRowCount(self.model.rowCount() + 1)
  134.  
  135.     def delete_row(self):
  136.         '''
  137.        '''
  138.         if len(self.ui.table_view.selectedIndexes()) == 0:
  139.             return
  140.  
  141.         index = self.ui.table_view.selectedIndexes() [0]
  142.         row  = self.sort_model.mapToSource (index).row ()
  143.        
  144.  
  145.         self.model.takeRow(row)
  146.        
  147.            
  148.     def save(self):
  149.         '''
  150.        '''
  151.         pass
  152.    
  153.     def cancel(self):
  154.         '''
  155.        '''
  156.         self.close()
  157.        
  158.     def show_menu(self, point):
  159.         '''
  160.        '''
  161.    
  162.         level = 0
  163.         self.menu_signal = QSignalMapper()
  164.        
  165.         index = self.ui.tree_view.selectedIndexes()
  166.         if len(index) > 0:
  167.             level = 0
  168.             indexe = index[0]
  169.            
  170.             while indexe.parent().isValid():
  171.                 indexe = indexe.parent()
  172.                 level +=1
  173.        
  174.             self.menu = QMenu()
  175.             if level == 0:
  176.                 if len(index) > 0:
  177.                     level = self.model.level(index[0])
  178.                
  179.                 for x in tree_menu[level].keys():
  180.                     action = self.menu.addAction(self.trUtf8(x))
  181.                     self.menu_signal.setMapping(action, tree_menu[level][x])
  182.                     self.connect(action, SIGNAL("triggered()"), self.menu_signal, SLOT("map()"))    
  183.                
  184. #            elif level == 1:
  185. #                if len(index) > 1:
  186. #                    level = self.model.level(index[0])
  187. #                
  188. #                for x in tree_menu[level+1].keys():
  189. #                    action = self.menu.addAction(self.trUtf8(x))
  190. #                    self.menu_signal.setMapping(action, tree_menu[level+1][x])
  191. #                    self.connect(action, SIGNAL("triggered()"), self.menu_signal, SLOT("map()"))
  192.                
  193.                
  194.             elif level == 2:
  195.                 if len(index) > 0:
  196.                     level = self.model.level(index[0])
  197.                
  198.                 for x in tree_menu[level+2].keys():
  199.                     action = self.menu.addAction(self.trUtf8(x))
  200.                     self.menu_signal.setMapping(action, tree_menu[level+2][x])
  201.                     self.connect(action, SIGNAL("triggered()"), self.menu_signal, SLOT("map()"))
  202.  
  203.  
  204.  
  205.  
  206.             self.connect(self.menu_signal, SIGNAL("mapped(int)"), self.actions)
  207.        
  208.             self.menu.exec_(self.ui.tree_view.viewport().mapToGlobal(point))
  209.        
  210.        
  211.     def actions(self, action):
  212.         '''
  213.        '''
  214.        
  215.         if action == ElementType.ADD_G:
  216.            
  217.             self.new_row()  #Llamado a funcion que crea un nuevo grupo de ajuste
  218.             print "Add G"
  219.        
  220.         if action == ElementType.EDIT_G:
  221.             #self.new_row()
  222.             print "Edit G"
  223.         if action == ElementType.DELETE_G:
  224.             print "Delete G"
  225.            
  226.         if action == ElementType.ADD_USR:
  227.             self.insertChild()
  228.             print "Add User"
  229.      
  230.         if action == ElementType.EDIT_USR:
  231.             print "Edit User"
  232.         #self.insertChild()
  233.         if action == ElementType.DELETE_USR:
  234.             print "Delete User"


Este es el codigo que hasta ahora tengo.....
y lo que necesito es que en el primer nivel de mi TreeView se muestre un nombre predefinido....
Gracias....

Nota: creo que se hace necesario recalcar el hecho de que en este codigo hay lineas que realmente no son necesarias (o lo son para mi proyecto) pero que surgen de otros archivos externos como se puede visualizar en los imports.....
La ACLARATORIA es para terceros que pudiesen necesitar hacer uso de alguna de las lineas que aca se muestran...

Última edición por AlvaroG; 10/03/2011 a las 09:18 Razón: coloreado de codigo
  #4 (permalink)  
Antiguo 13/03/2011, 17:51
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: QTreeView =)

Disculpa la demora, pero recién vuelvo a conectarme al foro

Pon una imagen de lo que buscás y otra de lo que querés lograr, porque sigo sin verlo. ¿No es simplemente agregar un primer elemento al TreeView?

Saludos.
  #5 (permalink)  
Antiguo 14/03/2011, 09:31
 
Fecha de Ingreso: enero-2011
Mensajes: 32
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: QTreeView =)

Bien.....
Esto tengo.....

[IMG]/home/atc/Desktop/esto tengo.png[/IMG]

Y esto quiero........

[IMG]/home/atc/Desktop/esto quiero.png[/IMG]

La idea como lo explicado anteriormente es que al cargar mi ventana la linea donde dice Grupos ya traiga ese nombre por defecto.....
  #6 (permalink)  
Antiguo 14/03/2011, 14:06
 
Fecha de Ingreso: enero-2011
Mensajes: 32
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: QTreeView =)

Ups!!! no supe montar la imagen pero aqui explico lo que necesito:

Código:
>Grupos             ----->Es este el nombre que necesito cargado por defecto...
   |___grupo1       ----->Ya estos los se cargar.
   |___grupo2
  #7 (permalink)  
Antiguo 15/03/2011, 22:58
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: QTreeView =)

Es que el foro no permite adjuntar imágenes, tendrás que subirla a algún servidor tipo bayimg o imageshack y luego vincularla desde acá.

Sin poder ver bien el efecto que querés, me suena a que simplemente querés un elemento padre del que los demás sean hijos, ¿o no? Para eso tenés que agregar crear el elemento Grupos con addTopLevelItem, y luego agregar el resto del árbol como hijos del elemento Grupos (via item.addChild)

http://doc.qt.nokia.com/latest/qtreewidgetitem.html
http://doc.qt.nokia.com/latest/qtreewidget.html


Saludos.
  #8 (permalink)  
Antiguo 16/03/2011, 11:50
 
Fecha de Ingreso: enero-2011
Mensajes: 32
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: QTreeView =)

Hola ya consegui alojar mi imagen...
esta es la direccion....
http://i.imgur.com/hb9V9.png

ahora bien esta es la imagen de mi ventana
lo que pretendo hacer es que el nombre donde dice Grupos se cargue automaticamente al abrir la ventana,pues dice Grupos porque yo lo edite alli luego de cargarlo.
y pues ahora tengo otra duda y es que al seleccionar por ejemplo como esta ahi el Groupo2 de mi TreeView este seleccione tambien la fila 2 de mi TableView
es eso, quiza sea simple pero no tengo idea de como hacerlo.
y estuve revisando los enlaces pero no entendi
  #9 (permalink)  
Antiguo 17/03/2011, 08:47
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: QTreeView =)

Creo que en esta respuesta ya te comenté lo que necesitás, lo tenés que hacer vía addTopLevelItem
http://www.forosdelweb.com/f130/qtre...6/#post3782086
  #10 (permalink)  
Antiguo 17/03/2011, 09:38
 
Fecha de Ingreso: enero-2011
Mensajes: 32
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: QTreeView =)

ok, lo intentare...
lo que pasa es que como ando trabajando en pyqt y no entiendo mucho c++ pues por eso...
pero lo intentare....
ehmmm y respecto a mi duda de la seleccion???
podrias por favor darme una idea de ello????

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:28.