Cita:
Iniciado por Onsterion Primero no creo que valla ser muy popular en un post donde pongo que no se hacer algo y que soy nuevo en python, si lo hago es por que paso más de un día y no veo otra respuesta viendo que hay gente que sabe como vos.
Lo que pasa es que esto va en contra de las
políticas del foro, ademas de ser una mala practica.
Ver bump.
Cita:
Iniciado por Onsterion Segundo puse un código de ejemplo del select usando el tablemodel, pense que era agregar algún atributo como .hideColumn(5)
Como dije antes, el ejemplo ni siquiera corría. No esperes una respuesta muy acertada o rápida, si no das mucha información / planteamiento del problema.
Cita:
Iniciado por Onsterion Pregunta vos importas =>
Código:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *
Yo lo importo
Código:
from PyQt4 import QtCore, QtGui, QtSql
no es lo mismo? o como es el tema? Ok, no es lo mismo. Lo ideal sería hacer lo siguiente:
Código Python:
Ver originalfrom PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4 import QtSql
Lo que hago en el
import *, es incluir todas las clases, funciones, variables o incluso otros modulos que pueda tener ese modulo. Mientras lo que tu haces es incluir solamente lo necesario. Te recomiendo que te quedes con tu técnica, no solamente por que la recomienda la guía de estilo, si no por que ademas sabes que tienes en tu namespace y no terminas teniendo un desastre como en java o php.
Ver
PEP-8 o
guía de estilo.
Como nota adicional, yo
no escribí el código (de hecho no he trabajado con pyqt4), solo fue copia de un código que mostraba el uso del modulo
QSqlTableModel, después lo modifique para que funcionara lo de las columnas no editables.
Cita:
Iniciado por Onsterion Ahora segun el ejemplo lo arme quedando asi:
Y ahora todas las casillas con números (INT) no son más editables y los "VARCHAR" si me los deja editar, habria alguna forma de espesificarle que solo afecte a la primer columna?
Gracias por la ayuda
Ups, lo siento, creo que me equivoque el código de ejemplo. Aquí esta el nuevo código, corregí el fallo y ademas agregue cambios para que sean varias columnas.
Código Python:
Ver originalfrom PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *
import sys
import os
class MainForm(QDialog):
def __init__(self):
super(MainForm, self).__init__()
self.not_editable_columns = [0, 2]
self.assetModel = QSqlTableModel(self)
self.assetModel.flags = self.flags
self.assetModel.setEditStrategy(QSqlTableModel.OnRowChange)
self.assetModel.setTable("testing")
self.assetModel.select()
self.assetView = QTableView()
self.assetView.setModel(self.assetModel)
self.assetView.setSelectionMode(QTableView.SingleSelection)
self.assetView.setSelectionBehavior(QTableView.SelectRows)
dataLayout = QVBoxLayout()
dataLayout.addWidget(self.assetView, 1)
layout = QHBoxLayout()
layout.addLayout(dataLayout, 1)
self.setLayout(layout)
self.setWindowTitle("Asset Manager")
def flags(self, idx):
baseflags = QAbstractTableModel.flags(self.assetModel, idx)
if idx.column() in self.not_editable_columns:
return baseflags
else:
return baseflags | Qt.ItemIsEditable
if __name__ == '__main__':
app = QApplication(sys.argv)
filename = os.path.join(os.path.dirname(__file__), "test.db")
create = not QFile.exists(filename)
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName(filename)
if not db.open():
QMessageBox.warning(None, "Asset Manager",
QString("Database Error: %1").arg(db.lastError().text()))
sys.exit(1)
print "Creating table..."
query = QSqlQuery()
r = query.exec_('drop table testing')
r = query.exec_("""CREATE TABLE testing (
id INTEGER,
value1 VARCHAR(20),
value2 INTEGER,
value3 VARCHAR(20)
)""" )
query.exec_("INSERT INTO testing (id, value1, value2, value3) "
"VALUES (1, '2', 3, '4')")
query.exec_("INSERT INTO testing (id, value1, value2, value3) "
"VALUES (5, '6', 7, '8')")
m = MainForm()
m.show()
app.exec_()