
actualizar un combobox
Publicado por hito (6 intervenciones) el 22/11/2014 01:26:09
buenas noches amigos yo de nuevo estoy mucho mas adelantado en mi proyecto que la ultima vez que coloque un tema por aqui :D :D :D
pero me encontre con una piedra de tropiezo: lo que ocurre es los siguiente tengo un QDialog con 2 QlineEdit 1 QComboBox y 1 QDateDataTime y un boton hasta hora no es nada del otro mundo, pero el combobox esta relacionando a una tabla y la relacion la hize sin mucho problema :D :D ... que me ocurre el boto llama a otro dialog en caso de que el usuario desee agregar otra opcion al combobox una ves que el usuario coloca lo que le necesita y guarda los datos. el combobox no actualiza el nuevo dato introducido . ( si cierro y abro el Dialog si me muestra los datos actualizados).. que necesito de que forma puedo actualizar ese conbobox sin cerrar completamente el Dialog, hasta ahora no e dado con la forma de hacerlo se me ocurrio colocar un boton para actualizar pero no me fuciono en algunas paginas hablan de las señales update() y repaint() pero no se usarla y los ejemplos que hay sobre esas señales no los entiendo, trate repitiendo parte del codigo principal en una funcion alli si me hacia la aztualizacion del combobox pero luego de ejecutar dicha funcion no guardaba en la base de datos
aqui esta el codigo del formulario
main.py
si alguien me puede hechar una mano y allar una forma que el combobox se actialize cuando agregamos un nuevo dato a la tabla tipo_material sin tener que cerrar y abrir el dialogo de Nuevo material
los respectivos Ui estan mas abajo por espacio no los pude colocar
pero me encontre con una piedra de tropiezo: lo que ocurre es los siguiente tengo un QDialog con 2 QlineEdit 1 QComboBox y 1 QDateDataTime y un boton hasta hora no es nada del otro mundo, pero el combobox esta relacionando a una tabla y la relacion la hize sin mucho problema :D :D ... que me ocurre el boto llama a otro dialog en caso de que el usuario desee agregar otra opcion al combobox una ves que el usuario coloca lo que le necesita y guarda los datos. el combobox no actualiza el nuevo dato introducido . ( si cierro y abro el Dialog si me muestra los datos actualizados).. que necesito de que forma puedo actualizar ese conbobox sin cerrar completamente el Dialog, hasta ahora no e dado con la forma de hacerlo se me ocurrio colocar un boton para actualizar pero no me fuciono en algunas paginas hablan de las señales update() y repaint() pero no se usarla y los ejemplos que hay sobre esas señales no los entiendo, trate repitiendo parte del codigo principal en una funcion alli si me hacia la aztualizacion del combobox pero luego de ejecutar dicha funcion no guardaba en la base de datos
aqui esta el codigo del formulario
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *
import nuevotipo
import crearmaterial
filename ="testui.db"
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName(filename)
if not db.open():
QMessageBox.warning(None, "Phone Log",
QString("Database Error: %1").arg(db.lastError().text()))
sys.exit(1)
query = QSqlQuery()
query.exec_("""CREATE TABLE tipo_material (
id_t_mat INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
nom VARCHAR(20) NOT NUll,
fec_crea DATE NOT NULL,
fec_mod DATE )""")
query.exec_("DROP TABLE material")
query.exec_("""CREATE TABLE material (
id_mat INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
id_t_mat INTEGER ,
cod_mat VARCHAR (20) NOT NULL,
nom VARCHAR(20) NOT NULL,
fec_crea DATE NOT NULL,
fec_mod DATE,
FOREIGN KEY (id_t_mat) REFERENCES tipo_material)""")
class Crea_usu (QDialog,crearmaterial.Ui_Dialog):
def __init__(self,parent=None):
super(Crea_usu,self).__init__(parent)
self.setupUi(self)
self.fecha.setDateTime(QDateTime.currentDateTime())
self.model= QSqlRelationalTableModel(self)
self.model.setTable("material")
self.model.setRelation(1,QSqlRelation("tipo_material","id_t_mat","nom"))
self.model.select()
row = self.model.rowCount()
self.model.insertRow(row)
self.mapper= QDataWidgetMapper(self)
self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit)
self.mapper.setModel(self.model)
self.mapper.setItemDelegate(QSqlRelationalDelegate(self))
self.mapper.addMapping(self.codedit,2)
self.mapper.addMapping(self.matedit,3)
self.mapper.addMapping(self.fecha,4)
relationModel = self.model.relationModel(1)
self.tipbox.setModel(relationModel)
self.tipbox.setModelColumn(relationModel.fieldIndex("nom"))
self.mapper.addMapping(self.tipbox,1)
self.mapper.toLast()
self.save.clicked.connect(self.guardar_clicked)
self.newtipbtn.clicked.connect(self.tipo_clicked)
self.f5.clicked.connect(self.act_clicked)
def act_clicked (self):
print("funcionando conex")
def tipo_clicked (self):
dialog=New_tip (self)
dialog.exec_()
def guardar_clicked (self):
self.variante=self.matedit.text()
row = self.model.rowCount()
self.mapper.submit()
self.model.insertRow(row)
self.mapper.setCurrentIndex(row)
QMessageBox.information(self, "Hello", "nombre "+self.variante+" guardo correctamente")
class New_tip (QDialog,nuevotipo.Ui_newtipo):
def __init__(self,parent=None):
super (New_tip,self).__init__(parent)
self.setupUi(self)
self.fecha.setDateTime(QDateTime.currentDateTime())
self.model= QSqlTableModel(self)
self.model.setTable("tipo_material")
self.model.select()
row = self.model.rowCount()
self.model.insertRow(row)
self.mapper= QDataWidgetMapper(self)
self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit)
self.mapper.setModel(self.model)
self.mapper.addMapping(self.nomedit,1)
self.mapper.addMapping(self.fecha,2)
self.mapper.toLast()
self.save.clicked.connect(self.guardar_clicked)
def guardar_clicked (self):
self.variante=self.nomedit.text()
row = self.model.rowCount()
self.mapper.submit()
self.model.insertRow(row)
self.mapper.setCurrentIndex(row)
QMessageBox.information(self, "Hello", "nombre "+self.variante+" guardo correctamente")
app= QApplication (sys.argv)
form = Crea_usu()
form.show()
app.exec_()
si alguien me puede hechar una mano y allar una forma que el combobox se actialize cuando agregamos un nuevo dato a la tabla tipo_material sin tener que cerrar y abrir el dialogo de Nuevo material
los respectivos Ui estan mas abajo por espacio no los pude colocar
Valora esta pregunta


0