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

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -