python - Handling multiple QComboBox in one cell widget -
code:
class example(qtgui.qwidget): def __init__(self, parent): super(accounts, self).__init__() self.initui() def initui(self): self.table = qtgui.qtablewidget() self.table.setcolumncount(5) database = 'setting.db' connection = sqlite3.connect(database) cursor = connection.cursor() cursor.execute(''' select id, user, text data ''') data = cursor.fetchall() num = 0 row in data: self.table.setrowcount(num+2) self.table.setitem(num, 0, qtgui.qtablewidgetitem(str(row[0]))) self.table.setitem(num, 1, qtgui.qtablewidgetitem(str(row[1]))) self.table.setitem(num, 2, qtgui.qtablewidgetitem(str(row[2]))) self.table.setcellwidget(num, 3, perms(self, row[0])) save_user = qtgui.qpushbutton("save") save_user.clicked.connect(self.save) self.table.setcellwidget(num, 5, save_user) num= num+1 main_layout = qtgui.qgridlayout() main_layout.addwidget(self.table) self.setlayout(main_layout) def save(self): button = self.sender() index = self.table.indexat(button.pos()) row = index.row() a_id = str(self.table.item(row, 0).text()) data = permissions(self, a_id).update_database() class perms(qtgui.qwidget): def __init__(self, parent, a_id): super(perms, self).__init__() self.a_id = a_id self.init_ui() def init_ui(self): database = 'settings.db' conn = sqlite3.connect(database) cursor = conn.cursor() cursor.execute(''' select control, sub perms id= ?''', (self.a_id,)) row = cursor.fetchone() control_label = qtgui.qlabel("control") sub_label = qtgui.qlabel("sub") self.control_options = qtgui.qcombobox() self.control_options.additem("y") self.control_options.additem("n") if str(row[0]) == "y": self.control_options.setcurrentindex(0) else: self.control_options.setcurrentindex(1) self.sub_options = qtgui.qcombobox() self.sub_options.additem("y") self.sub_options.additem("n") if str(row[1]) == "y": self.sub_options.setcurrentindex(0) else: self.sub_options.setcurrentindex(1) layout = qtgui.qgridlayout() layout.addwidget(full_control_label, 1, 1) layout.addwidget(self.full_control_options, 1, 2) layout.addwidget(tills_label, 2, 1) layout.addwidget(self.tills_options, 2, 2) self.setlayout(layout) def update_database(self): control = str(self.control_options.currenttext()) sub = str(self.sub_options.currenttext()) return (control, sub) ignore errors don't specify because wrote example. problem i'm facing is: save button created within loop in order used multiple times. connects function gets current text of combo-boxes. problem is, if change current text in combo-boxes , click save, gets text combo-boxes, not right text - same result.
for example:
qcombobox1: y
qcombobox2: n
if click save, it'll return ('y', 'n')
if change combobox values:
qcombobox1: n
qcombobox2: n
and click save, it'll return ('y', 'n')
but never returns new values combo-boxes.
how can fix updated values rather old values?
the save method doesn't make sense. surely need perm widget table, not make new 1 every time:
def save(self): button = self.sender() index = self.table.indexat(button.pos()) row = index.row() # new values table data = self.table.cellwidget(row, 3).update_database()
Comments
Post a Comment