python - Unable to populate QTableWidget -
i'm trying populate qtablewidget (set number of rows , columns, add column names , add data cells), widget appears empty , no errors thrown.
here working example, see class tableform():
from pyqt4 import qtcore, qtgui try: _fromutf8 = qtcore.qstring.fromutf8 except attributeerror: def _fromutf8(s): return s try: _encoding = qtgui.qapplication.unicodeutf8 def _translate(context, text, disambig): return qtgui.qapplication.translate(context, text, disambig, _encoding) except attributeerror: def _translate(context, text, disambig): return qtgui.qapplication.translate(context, text, disambig) class ui_tableform(object): def setupui(self, tableform): tableform.setobjectname(_fromutf8("tableform")) tableform.resize(495, 506) tableform.setlocale(qtcore.qlocale(qtcore.qlocale.russian, qtcore.qlocale.russianfederation)) self.verticallayout = qtgui.qvboxlayout(tableform) self.verticallayout.setobjectname(_fromutf8("verticallayout")) self.table_widget = qtgui.qtablewidget(tableform) self.table_widget.setrowcount(0) self.table_widget.setcolumncount(0) self.table_widget.setobjectname(_fromutf8("table_widget")) self.verticallayout.addwidget(self.table_widget) self.horizontallayout = qtgui.qhboxlayout() self.horizontallayout.setobjectname(_fromutf8("horizontallayout")) self.start_edit_button = qtgui.qpushbutton(tableform) self.start_edit_button.setobjectname(_fromutf8("start_edit_button")) self.horizontallayout.addwidget(self.start_edit_button) self.save_edits_buttonbox = qtgui.qdialogbuttonbox(tableform) self.save_edits_buttonbox.setenabled(false) self.save_edits_buttonbox.setstandardbuttons(qtgui.qdialogbuttonbox.cancel|qtgui.qdialogbuttonbox.save) self.save_edits_buttonbox.setobjectname(_fromutf8("save_edits_buttonbox")) self.horizontallayout.addwidget(self.save_edits_buttonbox) self.verticallayout.addlayout(self.horizontallayout) self.retranslateui(tableform) qtcore.qmetaobject.connectslotsbyname(tableform) def retranslateui(self, tableform): tableform.setwindowtitle(_translate("tableform", "Таблица", none)) self.start_edit_button.settext(_translate("tableform", "Редактировать", none)) class tableform(qtgui.qdialog, ui_tableform): def __init__(self): super(tableform, self).__init__() self.ui = ui_tableform() self.ui.setupui(self) data = [['name1', 'name2'], {'name1':[1], 'name2':[2]}, 2] col_names = data[0] col_data = data[1] rows = data[2] + 1 cols = len(col_names) self.ui.table_widget.setrowcount(rows) self.ui.table_widget.setcolumncount(cols) self.ui.table_widget.sethorizontalheaderlabels(col_names) n = 0 key in col_names: m = 0 item in col_data[key]: newitem = qtgui.qtablewidgetitem(item) self.ui.table_widget.setitem(m, n, newitem) m += 1 n += 1 if __name__ == "__main__": import sys app = qtgui.qapplication(sys.argv) dialog = qtgui.qdialog() u = tableform() u.setupui(dialog) dialog.show() sys.exit(app.exec_()) what wrong?
you're mixing several different ways of adding ui dialog. table population overwritten second call setupui, resets rows , columns zero.
i have fixed in code below, , corrected other issues (see comments):
# no need inherit ui_tableform class tableform(qtgui.qdialog): def __init__(self): super(tableform, self).__init__() self.ui = ui_tableform() self.ui.setupui(self) data = [['name1', 'name2'], {'name1':[1], 'name2':[2]}, 2] col_names = data[0] col_data = data[1] rows = data[2] + 1 cols = len(col_names) self.ui.table_widget.setrowcount(rows) self.ui.table_widget.setcolumncount(cols) self.ui.table_widget.sethorizontalheaderlabels(col_names) # use enumerate n, key in enumerate(col_names): m, item in enumerate(col_data[key]): # item content must strings newitem = qtgui.qtablewidgetitem(str(item)) self.ui.table_widget.setitem(m, n, newitem) if __name__ == "__main__": import sys app = qtgui.qapplication(sys.argv) # ui setup done in __init__ dialog = tableform() dialog.show() sys.exit(app.exec_())
Comments
Post a Comment