def _addNewDescriptorTableRow(self, name, descriptor): """ Adds a new row to the descriptor table. """ row = self.descriptorsTable.rowCount() self.descriptorsTable.insertRow(row) item_widget = QTableWidgetItem(name) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignLeft) self.descriptorsTable.setItem(row, 0, item_widget) self.descriptorsTable.resizeColumnToContents(0) s = self._makeProperAAString(descriptor) item_widget = QTableWidgetItem(s) item_widget.setFont(self.descriptorfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignLeft) self.descriptorsTable.setItem(row, 1, item_widget) self.descriptorsTable.setColumnWidth( 1, self.descriptorsTable.width() - self.descriptorsTable.columnWidth(0) - 20) self.descriptorsTable.setRowHeight(row, 16)
def addparameters(self): ''' This function is used to add new parameter in the table ''' text1, ok = QtGui.QInputDialog.getText(self, 'Parameter', 'Enter Parameter') if ok: if text1 in self.modeldict.keys(): self.msg = QtGui.QErrorMessage(self) self.msg.showMessage("The paramaeter " + text1 + " is already in the list") self.msg.setWindowTitle("Error Message") return text2, ok = QtGui.QInputDialog.getText(self, 'Value', 'Enter Value') if ok: currentRowCount = self.modeltable.rowCount() self.modeltable.insertRow(currentRowCount) self.modeltable.setItem(currentRowCount, 0, QTableWidgetItem(text1)) self.modeltable.setItem(currentRowCount, 1, QTableWidgetItem(text2)) self.modeldict[str(text1)] = str(text2) else: pass else: pass
def addparameters(self): ''' - Called when `Add` button clicked beside QTableWidget - Open up dialog box to enter parameter and value accordingly - Validate if parameter already in list of parameters - Accordingly add parameter and value in modeldict as well as table - text1 => parameter, text2 => value ''' text1, ok = QtGui.QInputDialog.getText(self, 'Parameter', 'Enter Parameter') if ok: if text1 in list(self.modeldict.keys()): self.msg = QtGui.QErrorMessage(self) self.msg.setModal(True) self.msg.setWindowTitle("Error Message") self.msg.showMessage("The paramaeter " + text1 + " is already in the list") self.msg.exec_() return text2, ok = QtGui.QInputDialog.getText(self, 'Value', 'Enter Value') if ok: currentRowCount = self.modeltable.rowCount() self.modeltable.insertRow(currentRowCount) self.modeltable.setItem(currentRowCount, 0, QTableWidgetItem(text1)) self.modeltable.setItem(currentRowCount, 1, QTableWidgetItem(text2)) self.modeldict[str(text1)] = str(text2) else: pass else: pass
def createtable(self, modelfile): ''' - Set states for other components - Initialise QTable widget - Set options for QTable widget - Place QTable widget, using `self.grid.addWidget` - Select the `.xml` file from the modelfile passed as `.lib` - Use ET (xml.etree.ElementTree) to parse the xml file - Extract data from the XML and store it in `modeldict` - Show the extracted data in QTableWidget - Can edit QTable inplace, connect `edit_modeltable`\ function for editing ''' self.savebtn.setDisabled(False) self.addbtn.setHidden(False) self.removebtn.setHidden(False) self.modelfile = modelfile self.modeldict = {} self.modeltable = QtGui.QTableWidget() self.modeltable.resizeColumnsToContents() self.modeltable.setColumnCount(2) self.modeltable.resizeRowsToContents() self.modeltable.resize(200, 200) self.grid.addWidget(self.modeltable, 3, 2, 8, 2) filepath, filename = os.path.split(self.modelfile) base, ext = os.path.splitext(filename) self.modelfile = os.path.join(filepath, base + '.xml') print("Model File used for creating table : ", self.modelfile) self.tree = ET.parse(self.modelfile) self.root = self.tree.getroot() for elem in self.tree.iter(tag='ref_model'): self.ref_model = elem.text for elem in self.tree.iter(tag='model_name'): self.model_name = elem.text row = 0 # get data from XML and store to dictionary (self.modeldict) for params in self.tree.findall('param'): for paramlist in params: self.modeldict[paramlist.tag] = paramlist.text row = row + 1 self.modeltable.setRowCount(row) count = 0 # setItem in modeltable, for each item in modeldict for tags, values in list(self.modeldict.items()): self.modeltable.setItem(count, 0, QTableWidgetItem(tags)) try: valueitem = QTableWidgetItem(values) except BaseException: pass self.modeltable.setItem(count, 1, valueitem) count = count + 1 self.modeltable.setHorizontalHeaderLabels( ("Parameters;Values").split(";")) self.modeltable.show() self.modeltable.itemChanged.connect(self.edit_modeltable)
def _fillSequenceTable(self): """ """ self.setComboBox = QComboBox() for chunk in self.win.assy.molecules: if chunk.isProteinChunk(): aa_list = chunk.protein.get_amino_acids() aa_list_len = len(aa_list) self.sequenceTable.setRowCount(aa_list_len) for index in range(aa_list_len): item_widget = QTableWidgetItem("") item_widget.setFont(self.labelfont) item_widget.setCheckState(Qt.Checked) item_widget.setTextAlignment(Qt.AlignLeft) item_widget.setSizeHint(QSize(20, 12)) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) self.sequenceTable.setItem(index, 0, item_widget) item_widget = QTableWidgetItem(str(index + 1)) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 1, item_widget) item_widget = QTableWidgetItem("Any") item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 2, item_widget) aa_string = self._get_mutation_descriptor( self._get_aa_for_index(index)) item_widget = QTableWidgetItem(aa_string) item_widget.setFont(self.descriptorfont) self.sequenceTable.setItem(index, 3, item_widget) self.sequenceTable.setRowHeight(index, 16) self.win.connect(self.sequenceTable, SIGNAL("cellClicked(int, int)"), self._sequenceTableCellChanged) self.sequenceTable.resizeColumnsToContents() self.sequenceTable.setColumnWidth(0, 35) self.sequenceTable.setColumnWidth(2, 80)
def populate_tbl_helper(hsgui, tbl, col_headers, col_editable, row_list, row2_data_tup ): #tbl = main_skel.chip_TBL hheader = tbl.horizontalHeader() sort_col = hheader.sortIndicatorSection() sort_ord = hheader.sortIndicatorOrder() tbl.sortByColumn(0, Qt.AscendingOrder) # Basic Sorting prevBlockSignals = tbl.blockSignals(True) tbl.clear() tbl.setColumnCount(len(col_headers)) tbl.setRowCount(len(row_list)) tbl.verticalHeader().hide() tbl.setHorizontalHeaderLabels(col_headers) tbl.setSelectionMode( QAbstractItemView.SingleSelection ) tbl.setSelectionBehavior( QAbstractItemView.SelectRows) tbl.setSortingEnabled(False) for row in iter(row_list): data_tup = row2_data_tup[row] for col, data in enumerate(data_tup): item = QTableWidgetItem() try: int_data = int(data) item.setData(Qt.DisplayRole, int_data) except ValueError: # for strings item.setText(str(data)) except TypeError: #for lists item.setText(str(data)) item.setTextAlignment(Qt.AlignHCenter) if col_editable[col]: item.setFlags(item.flags() | Qt.ItemIsEditable) else: item.setFlags(item.flags() ^ Qt.ItemIsEditable) tbl.setItem(row, col, item) tbl.setSortingEnabled(True) tbl.sortByColumn(sort_col,sort_ord) # Move back to old sorting tbl.show() tbl.blockSignals(prevBlockSignals)
def createtable(self, modelfile): self.savebtn.setDisabled(False) self.addbtn.setHidden(False) self.removebtn.setHidden(False) self.modelfile = modelfile self.modeldict = {} self.modeltable = QtGui.QTableWidget() self.modeltable.resizeColumnsToContents() self.modeltable.setColumnCount(2) self.modeltable.resizeRowsToContents() self.modeltable.resize(200, 200) self.grid.addWidget(self.modeltable, 3, 2, 8, 2) filepath, filename = os.path.split(self.modelfile) print "file selected is", filename print filepath base, ext = os.path.splitext(filename) print base print ext self.modelfile = os.path.join(filepath, base + '.xml') print "modelfile", self.modelfile self.tree = ET.parse(self.modelfile) self.root = self.tree.getroot() for elem in self.tree.iter(tag='ref_model'): self.ref_model = elem.text for elem in self.tree.iter(tag='model_name'): self.model_name = elem.text row = 0 for params in self.tree.findall('param'): for paramlist in params: self.modeldict[paramlist.tag] = paramlist.text row = row + 1 self.modeltable.setRowCount(row) count = 0 for tags, values in self.modeldict.items(): self.modeltable.setItem(count, 0, QTableWidgetItem(tags)) try: valueitem = QTableWidgetItem(values) except: pass self.modeltable.setItem(count, 1, valueitem) count = count + 1 self.modeltable.setHorizontalHeaderLabels( QtCore.QString("Parameters;Values").split(";")) self.modeltable.show() self.modeltable.itemChanged.connect(self.edit_modeltable)
def __init__(self, parent, *args): QWidget.__init__(self, parent, *args) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) lo = QVBoxLayout(self) lo.setContentsMargins(0, 0, 0, 0) lo1 = QHBoxLayout() lo.addLayout(lo1) lo1.setContentsMargins(0, 0, 0, 0) lbl = QLabel(QString("<nobr><b>Source groupings:</b></nobr>"), self) lo1.addWidget(lbl, 0) lo1.addStretch(1) # add show/hide button self._showattrbtn = QPushButton(self) self._showattrbtn.setMinimumWidth(256) lo1.addWidget(self._showattrbtn, 0) lo1.addStretch() QObject.connect(self._showattrbtn, SIGNAL("clicked()"), self._togglePlotControlsVisibility) # add table self.table = QTableWidget(self) lo.addWidget(self.table) QObject.connect(self.table, SIGNAL("cellChanged(int,int)"), self._valueChanged) self.table.setSelectionMode(QTableWidget.NoSelection) # setup basic columns self.table.setColumnCount(6 + len(self.EditableAttrs)) for i, label in enumerate( ("grouping", "total", "selection", "list", "plot", "style")): self.table.setHorizontalHeaderItem(i, QTableWidgetItem(label)) self.table.horizontalHeader().setSectionHidden(self.ColApply, True) # setup columns for editable grouping attributes for i, attr in self.AttrByCol.items(): self.table.setHorizontalHeaderItem( i, QTableWidgetItem(PlotStyles.StyleAttributeLabels[attr])) self.table.horizontalHeader().setSectionHidden(i, True) self.table.verticalHeader().hide() # other internal init self._attrs_shown = False self._togglePlotControlsVisibility() self.model = None self._setting_model = False self._currier = PersistentCurrier() # row of 'selected' grouping self._irow_selgroup = 0
def _makeCheckItem(self, name, group, attr): item = QTableWidgetItem(name) if group is self.model.defgroup: item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) item.setCheckState( Qt.Checked if getattr(group.style, attr) else Qt.Unchecked) else: item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsTristate) item.setCheckState(self.ShowAttrToCheckState[getattr( group.style, attr)]) return item
def _fill_widgets(self): self.db_textbox.setText(self.request) db_path = self.spec_node.attrib['dbpath'] spec_id = self.spec_node.attrib['id'] found_vars = self.spec_node.findall('{http://www.tum-create.edu.sg/timingSchema}variable') if found_vars == None: return i = 0 for var in found_vars: var_name = var.attrib['name'] var_config = var.attrib['config'] var_type = var.attrib['type'] val = var.find('{http://www.tum-create.edu.sg/timingSchema}value') if val == None: return var_value = val.text self.condition_tab.setItem(i, 0, QTableWidgetItem(spec_id)) self.condition_tab.setItem(i, 1, QTableWidgetItem(db_path)) self.condition_tab.setItem(i, 2, QTableWidgetItem(var_name)) self.condition_tab.setItem(i, 3, QTableWidgetItem(var_config)) self.condition_tab.setItem(i, 4, QTableWidgetItem(var_type)) self.condition_tab.setItem(i, 5, QTableWidgetItem(var_value)) i += 1
def on_type_cb_itemchanged(self): ''' changed index if new Setting hit create new Setting''' for i in range(self.elem_tab.rowCount()): try: cb = self.type_idx_to_cb[i] if(cb.currentText() == "new Setting ..."): idx = cb.findText(self.type_item_state[i]) cb.setCurrentIndex(idx) self.new_setting(i) continue if cb.currentText() != self.type_item_state[i] and cb.currentText() != 'CUSTOMIZED': ''' load values '''# itm = self.elem_tab.item(i, 1) txt = itm.text() cor_dic = self.type_to_dict[txt] try: val = cor_dic[cb.currentText()] self.elem_tab.setItem(i, 3, QTableWidgetItem(str(val))) except: pass self.db_lookup_dict[txt] itm1 = self.elem_tab.item(i, 0) itm2 = self.elem_tab.item(i, 1) ''' if DB Lookup show request -> double click opens window: edit request and edit the condition ''' [request, spec] = TimingDBMap().lookup_from_spec(itm1.text(), itm2.text(), cb.currentText()) [condition, spec] = TimingDBMap().conditions_from_spec(itm1.text(), itm2.text(), cb.currentText()) itm = QTableWidgetItem(request) self.elem_tab.setItem(i, 4, itm) itm.setToolTip("Conditions: \n%s" % self._pretty_str_cond(condition)) self.db_lookup_idx_to_info[i] = [condition, request, spec] self.type_item_state[i] = cb.currentText() except: pass
def updateTableWidget(self, tableWidget, tableDictionary): tableWidget.clear() horHeaders = [] tableWidget.setColumnCount(len(tableDictionary)) tableWidget.setRowCount(len( tableDictionary[tableDictionary.keys()[0]])) for n, key in enumerate(tableDictionary.keys()): horHeaders.append(key) for m, item in enumerate(tableDictionary[key]): newItem = QTableWidgetItem(item) tableWidget.setItem(m, n, newItem) tableWidget.setHorizontalHeaderLabels(horHeaders) tableWidget.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch)
def _set_timing_tab(self, timing_vars): self.elem_tab.setRowCount(len(timing_vars)) self.db_lookup_idx_to_info = {} self.type_cb_to_idx = {} self.type_idx_to_cb = {} self.type_item_state = {} self.type_to_dict = {} for i in range(len(timing_vars)): cur_var = timing_vars[i][0] cur_vals = timing_vars[i][1] cur_ass = timing_vars[i][2] cur_vals_dict = timing_vars[i][3] ''' 1. Set Variable Name ''' self.elem_tab.setItem(i, 0, QTableWidgetItem(cur_ass)) self.elem_tab.setItem(i, 1, QTableWidgetItem(cur_var)) self.elem_tab.setItem(i, 2, QTableWidgetItem()) self.type_to_dict[cur_var] = cur_vals_dict ''' 2. Set Setting ''' wid = QWidget() vl = QVBoxLayout() cb = self.builder.combobox(self, cur_vals + ["new Setting ..."], self.on_type_cb_itemchanged) self.type_cb_to_idx[str(cb)] = i self.type_idx_to_cb[i] = cb cb.setFixedHeight(20) vl.addWidget(cb) wid.setLayout(vl) self.elem_tab.setCellWidget(i, 2, wid) self.type_item_state[i] = cb.currentText() ''' 3. Set value''' self.elem_tab.setItem(i, 3, QTableWidgetItem(str(cur_vals_dict[cb.currentText()])))
def updateWalletTable(self): numWallets = len(self.main.walletMap) self.wltTable.setRowCount(numWallets) self.wltTable.setColumnCount(4) row = 0 for wltID, wltObj in self.main.walletMap.iteritems(): wltValueBTC = '(...)' wltValueUSD = '(...)' if TheBDM.getState() == BDM_BLOCKCHAIN_READY: convertVal = float(self.lastSellStr.replace(',', '')) wltBal = wltObj.getBalance('Total') wltValueBTC = coin2str(wltBal, maxZeros=2) wltValueUSD = '$' + self.addCommasToPrice( '%0.2f' % (wltBal * convertVal / 1e8)) rowItems = [] rowItems.append(QTableWidgetItem(wltID)) rowItems.append(QTableWidgetItem(wltObj.labelName)) rowItems.append(QTableWidgetItem(wltValueBTC)) rowItems.append(QTableWidgetItem(wltValueUSD)) rowItems[-2].setTextAlignment(Qt.AlignRight) rowItems[-1].setTextAlignment(Qt.AlignRight) rowItems[-2].setFont(GETFONT('Fixed', 10)) rowItems[-1].setFont(GETFONT('Fixed', 10)) for i, item in enumerate(rowItems): self.wltTable.setItem(row, i, item) item.setFlags(Qt.NoItemFlags) self.wltTable.setHorizontalHeaderItem( 0, QTableWidgetItem(tr('Wallet ID'))) self.wltTable.setHorizontalHeaderItem( 1, QTableWidgetItem(tr('Wallet Name'))) self.wltTable.setHorizontalHeaderItem( 2, QTableWidgetItem(tr('BTC Balance'))) self.wltTable.setHorizontalHeaderItem( 3, QTableWidgetItem(tr('USD ($) Value'))) self.wltTable.verticalHeader().hide() row += 1
def __init__(self, parent, get_option, get_help, db=None, book_id=None): # Dummy attributes to fool the Widget() option handler code. We handle # everything in our *handler methods. for i in range(1, 4): x = 'sr%d_' % i for y in ('search', 'replace'): z = x + y setattr(self, 'opt_' + z, z) self.opt_search_replace = 'search_replace' Widget.__init__(self, parent, [ 'search_replace', 'sr1_search', 'sr1_replace', 'sr2_search', 'sr2_replace', 'sr3_search', 'sr3_replace' ]) self.db, self.book_id = db, book_id self.sr_search.set_msg(_('&Search Regular Expression')) self.sr_search.set_book_id(book_id) self.sr_search.set_db(db) self.sr_search.doc_update.connect(self.update_doc) proto = QTableWidgetItem() proto.setFlags(Qt.ItemFlags(Qt.ItemIsSelectable + Qt.ItemIsEnabled)) self.search_replace.setItemPrototype(proto) self.search_replace.setColumnCount(2) self.search_replace.setColumnWidth(0, 320) self.search_replace.setColumnWidth(1, 320) self.search_replace.setHorizontalHeaderLabels( [_('Search Regular Expression'), _('Replacement Text')]) self.sr_add.clicked.connect(self.sr_add_clicked) self.sr_change.clicked.connect(self.sr_change_clicked) self.sr_remove.clicked.connect(self.sr_remove_clicked) self.sr_load.clicked.connect(self.sr_load_clicked) self.sr_save.clicked.connect(self.sr_save_clicked) self.sr_up.clicked.connect(self.sr_up_clicked) self.sr_down.clicked.connect(self.sr_down_clicked) self.search_replace.currentCellChanged.connect( self.sr_currentCellChanged) self.initialize_options(get_option, get_help, db, book_id)
def __init__(self, parent, items): QDialog.__init__(self, parent) Ui_DeleteMatchingFromDeviceDialog.__init__(self) self.setupUi(self) self.explanation.setText('<p>'+_('All checked books will be ' '<b>permanently deleted</b> from your ' 'device. Please verify the list.')+'</p>') self.buttonBox.accepted.connect(self.accepted) self.buttonBox.rejected.connect(self.rejected) self.table.cellClicked.connect(self.cell_clicked) self.table.setSelectionMode(QAbstractItemView.NoSelection) self.table.setColumnCount(7) self.table.setHorizontalHeaderLabels( ['', _('Location'), _('Title'), _('Author'), _('Date'), _('Format'), _('Path')]) rows = 0 for card in items: rows += len(items[card][1]) self.table.setRowCount(rows) row = 0 for card in items: (model,books) = items[card] for (id,book) in books: item = QTableWidgetItem() item.setFlags(Qt.ItemIsUserCheckable|Qt.ItemIsEnabled) item.setCheckState(Qt.Checked) item.setData(Qt.UserRole, (model, id, book.path)) self.table.setItem(row, 0, item) self.table.setItem(row, 1, tableItem(card)) self.table.setItem(row, 2, titleTableItem(book.title)) self.table.setItem(row, 3, authorTableItem(book)) self.table.setItem(row, 4, dateTableItem(book.datetime)) self.table.setItem(row, 5, centeredTableItem(book.path.rpartition('.')[2])) self.table.setItem(row, 6, tableItem(book.path)) row += 1 self.table.setCurrentCell(0, 1) self.table.resizeColumnsToContents() self.table.setSortingEnabled(True) self.table.sortByColumn(2, Qt.AscendingOrder) self.table.setCurrentCell(0, 1)
def _fillSequenceTable(self): """ Fills in the sequence table. """ if not self.current_protein: return else: currentProteinChunk = self.current_protein self.editingItem = True aa_list = currentProteinChunk.protein.get_amino_acids() aa_list_len = len(aa_list) self.sequenceTable.setRowCount(aa_list_len) for index in range(aa_list_len): # Selection checkbox column item_widget = QTableWidgetItem("") item_widget.setFont(self.labelfont) item_widget.setCheckState(Qt.Checked) item_widget.setTextAlignment(Qt.AlignLeft) item_widget.setSizeHint(QSize(20, 12)) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) self.sequenceTable.setItem(index, 0, item_widget) # Amino acid index column item_widget = QTableWidgetItem(str(index + 1)) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 1, item_widget) # Mutation descriptor name column aa = self._get_aa_for_index(index) item_widget = QTableWidgetItem(self._get_descriptor_name(aa)) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 2, item_widget) # Backrub checkbox column item_widget = QTableWidgetItem("") item_widget.setFont(self.labelfont) if aa.get_backrub_mode(): item_widget.setCheckState(Qt.Checked) else: item_widget.setCheckState(Qt.Unchecked) item_widget.setTextAlignment(Qt.AlignLeft) item_widget.setSizeHint(QSize(20, 12)) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) self.sequenceTable.setItem(index, 3, item_widget) # Mutation descriptor column aa_string = self._get_mutation_descriptor(aa) item_widget = QTableWidgetItem(aa_string) item_widget.setFont(self.descriptorfont) self.sequenceTable.setItem(index, 4, item_widget) self.sequenceTable.setRowHeight(index, 16) self.editingItem = False self.sequenceTable.resizeColumnsToContents() self.sequenceTable.setColumnWidth(0, 35) self.sequenceTable.setColumnWidth(2, 80) self.sequenceTable.setColumnWidth(3, 35) return
def __init__(self, gui, view, id_): QDialog.__init__(self, gui, flags=Qt.Window) Ui_MatchBooks.__init__(self) self.setupUi(self) self.isClosed = False self.books_table_column_widths = None try: self.books_table_column_widths = \ gprefs.get('match_books_dialog_books_table_widths', None) geom = gprefs.get('match_books_dialog_geometry', bytearray('')) self.restoreGeometry(QByteArray(geom)) except: pass self.search_text.initialize('match_books_dialog') # Remove the help button from the window title bar icon = self.windowIcon() self.setWindowFlags(self.windowFlags() & (~Qt.WindowContextHelpButtonHint)) self.setWindowIcon(icon) self.device_db = view.model().db self.library_db = gui.library_view.model().db self.view = view self.gui = gui self.current_device_book_id = id_ self.current_library_book_id = None # Set up the books table columns self.books_table.setSelectionBehavior(QAbstractItemView.SelectRows) self.books_table.setSelectionMode(QAbstractItemView.SingleSelection) self.books_table.setColumnCount(3) t = QTableWidgetItem(_('Title')) self.books_table.setHorizontalHeaderItem(0, t) t = QTableWidgetItem(_('Authors')) self.books_table.setHorizontalHeaderItem(1, t) t = QTableWidgetItem(_('Series')) self.books_table.setHorizontalHeaderItem(2, t) self.books_table_header_height = self.books_table.height() self.books_table.cellDoubleClicked.connect(self.book_doubleclicked) self.books_table.cellClicked.connect(self.book_clicked) self.books_table.sortByColumn(0, Qt.AscendingOrder) # get the standard table row height. Do this here because calling # resizeRowsToContents can word wrap long cell contents, creating # double-high rows self.books_table.setRowCount(1) self.books_table.setItem(0, 0, TableItem('A', '')) self.books_table.resizeRowsToContents() self.books_table_row_height = self.books_table.rowHeight(0) self.books_table.setRowCount(0) self.search_button.clicked.connect(self.do_search) self.search_button.setDefault(False) self.search_text.lineEdit().returnPressed.connect(self.return_pressed) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.ignore_next_key = False self.search_text.setText( self.device_db[self.current_device_book_id].title)
def __init__(self, gui, view, row): QDialog.__init__(self, gui, flags=Qt.Window) Ui_Quickview.__init__(self) self.setupUi(self) self.isClosed = False self.books_table_column_widths = None try: self.books_table_column_widths = \ gprefs.get('quickview_dialog_books_table_widths', None) geom = gprefs.get('quickview_dialog_geometry', bytearray('')) self.restoreGeometry(QByteArray(geom)) except: pass # Remove the help button from the window title bar icon = self.windowIcon() self.setWindowFlags(self.windowFlags() & (~Qt.WindowContextHelpButtonHint)) self.setWindowIcon(icon) self.db = view.model().db self.view = view self.gui = gui self.is_closed = False self.current_book_id = None self.current_key = None self.last_search = None self.current_column = None self.current_item = None self.no_valid_items = False self.items.setSelectionMode(QAbstractItemView.SingleSelection) self.items.currentTextChanged.connect(self.item_selected) # Set up the books table columns self.books_table.setSelectionBehavior(QAbstractItemView.SelectRows) self.books_table.setSelectionMode(QAbstractItemView.SingleSelection) self.books_table.setColumnCount(3) t = QTableWidgetItem(_('Title')) self.books_table.setHorizontalHeaderItem(0, t) t = QTableWidgetItem(_('Authors')) self.books_table.setHorizontalHeaderItem(1, t) t = QTableWidgetItem(_('Series')) self.books_table.setHorizontalHeaderItem(2, t) self.books_table_header_height = self.books_table.height() self.books_table.cellDoubleClicked.connect(self.book_doubleclicked) self.books_table.sortByColumn(0, Qt.AscendingOrder) # get the standard table row height. Do this here because calling # resizeRowsToContents can word wrap long cell contents, creating # double-high rows self.books_table.setRowCount(1) self.books_table.setItem(0, 0, TableItem('A', '')) self.books_table.resizeRowsToContents() self.books_table_row_height = self.books_table.rowHeight(0) self.books_table.setRowCount(0) # Add the data self.refresh(row) self.view.clicked.connect(self.slave) QCoreApplication.instance().aboutToQuit.connect(self.save_state) self.search_button.clicked.connect(self.do_search) view.model().new_bookdisplay_data.connect(self.book_was_changed)
def _updateModel(self, what=SkyModel.UpdateAll, origin=None): if origin is self or not what & (SkyModel.UpdateTags | SkyModel.UpdateGroupStyle): return model = self.model self._setting_model = True # to ignore cellChanged() signals (in valueChanged()) # _item_cb is a dict (with row,col keys) containing the widgets (CheckBoxes ComboBoxes) per each cell self._item_cb = {} # lists of "list" and "plot" checkboxes per each grouping (excepting the default grouping); each entry is an (row,col,item) tuple. # used as argument to self._showControls() self._list_controls = [] self._plot_controls = [] # list of selection callbacks (to which signals are connected) self._callbacks = [] # set requisite number of rows,and start filling self.table.setRowCount(len(model.groupings)) for irow, group in enumerate(model.groupings): self.table.setItem(irow, 0, QTableWidgetItem(group.name)) if group is model.selgroup: self._irow_selgroup = irow # total # source in group: skip for "current" if group is not model.curgroup: self.table.setItem(irow, 1, QTableWidgetItem(str(group.total))) # selection controls: skip for current and selection if group not in (model.curgroup, model.selgroup): btns = QWidget() lo = QHBoxLayout(btns) lo.setContentsMargins(0, 0, 0, 0) lo.setSpacing(0) # make selector buttons (depending on which group we're in) if group is model.defgroup: Buttons = (("+", lambda src, grp=group: True, "select all sources"), ("-", lambda src, grp=group: False, "unselect all sources")) else: Buttons = ( ("=", lambda src, grp=group: grp.func(src), "select only this grouping"), ("+", lambda src, grp=group: src.selected or grp.func(src), "add grouping to selection"), ("-", lambda src, grp=group: src.selected and not grp. func(src), "remove grouping from selection"), ("&&", lambda src, grp=group: src.selected and grp.func(src), "intersect selection with grouping")) lo.addStretch(1) for label, predicate, tooltip in Buttons: btn = QToolButton(btns) btn.setText(label) btn.setMinimumWidth(24) btn.setMaximumWidth(24) btn.setToolTip(tooltip) lo.addWidget(btn) # add callback QObject.connect( btn, SIGNAL("clicked()"), self._currier.curry(self.selectSources, predicate)) lo.addStretch(1) self.table.setCellWidget(irow, 2, btns) # "list" checkbox (not for current and selected groupings: these are always listed) if group not in (model.curgroup, model.selgroup): item = self._makeCheckItem("", group, "show_list") self.table.setItem(irow, self.ColList, item) item.setToolTip( """<P>If checked, sources in this grouping will be listed in the source table. If un-checked, sources will be excluded from the table. If partially checked, then the default list/no list setting of "all sources" will be in effect. </P>""") # "plot" checkbox (not for the current grouping, since that's always plotted) if group is not model.curgroup: item = self._makeCheckItem("", group, "show_plot") self.table.setItem(irow, self.ColPlot, item) item.setToolTip( """<P>If checked, sources in this grouping will be included in the plot. If un-checked, sources will be excluded from the plot. If partially checked, then the default plot/no plot setting of "all sources" will be in effect. </P>""") # custom style control # for default, current and selected, this is just a text label if group is model.defgroup: item = QTableWidgetItem("default:") item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setToolTip( """<P>This is the default plot style used for all sources for which a custom grouping style is not selected.</P>""" ) self.table.setItem(irow, self.ColApply, item) elif group is model.curgroup: item = QTableWidgetItem("") item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setToolTip( """<P>This is the plot style used for the highlighted source, if any.</P>""" ) self.table.setItem(irow, self.ColApply, item) elif group is model.selgroup: item = QTableWidgetItem("") item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setToolTip( """<P>This is the plot style used for the currently selected sources.</P>""" ) self.table.setItem(irow, self.ColApply, item) # for the rest, a combobox with custom priorities else: cb = QComboBox() cb.addItems(["default"] + ["custom %d" % p for p in range(1, 10)]) index = max(0, min(group.style.apply, 9)) # dprint(0,group.name,"apply",index) cb.setCurrentIndex(index) QObject.connect( cb, SIGNAL("activated(int)"), self._currier.xcurry(self._valueChanged, (irow, self.ColApply))) self.table.setCellWidget(irow, self.ColApply, cb) cb.setToolTip( """<P>This controls whether sources within this group are plotted with a customized plot style. Customized styles have numeric priority; if a source belongs to multiple groups, then the style with the lowest priority takes precedence.<P>""") # attribute comboboxes for icol, attr in self.AttrByCol.items(): # get list of options for this style attribute. If dealing with first grouping (i==0), which is # the "all sources" grouping, then remove the "default" option (which is always first in the list) options = PlotStyles.StyleAttributeOptions[attr] if irow == 0: options = options[1:] # make combobox cb = QComboBox() cb.addItems(list(map(str, options))) # the "label" option is also editable if attr == "label": cb.setEditable(True) try: index = options.index(getattr(group.style, attr)) cb.setCurrentIndex(index) except ValueError: cb.setEditText(str(getattr(group.style, attr))) slot = self._currier.xcurry(self._valueChanged, (irow, icol)) QObject.connect(cb, SIGNAL("activated(int)"), slot) QObject.connect(cb, SIGNAL("editTextChanged(const QString &)"), slot) cb.setEnabled(group is model.defgroup or group.style.apply) self.table.setCellWidget(irow, icol, cb) label = attr if irow: cb.setToolTip( """<P>This is the %s used to plot sources in this group, when a "custom" style for the group is enabled via the style control.<P>""" % label) else: cb.setToolTip( "<P>This is the default %s used for all sources for which a custom style is not specified below.<P>" % label) self.table.resizeColumnsToContents() # re-enable processing of cellChanged() signals self._setting_model = False
def __init__(self, parent, db, id_to_select, select_sort, select_link): QDialog.__init__(self, parent) Ui_EditAuthorsDialog.__init__(self) self.setupUi(self) # Remove help icon on title bar icon = self.windowIcon() self.setWindowFlags(self.windowFlags() & (~Qt.WindowContextHelpButtonHint)) self.setWindowIcon(icon) try: self.table_column_widths = \ gprefs.get('manage_authors_table_widths', None) geom = gprefs.get('manage_authors_dialog_geometry', bytearray('')) self.restoreGeometry(QByteArray(geom)) except: pass self.buttonBox.accepted.connect(self.accepted) # Set up the column headings self.table.setSelectionMode(QAbstractItemView.SingleSelection) self.table.setColumnCount(3) self.down_arrow_icon = QIcon(I('arrow-down.png')) self.up_arrow_icon = QIcon(I('arrow-up.png')) self.blank_icon = QIcon(I('blank.png')) self.auth_col = QTableWidgetItem(_('Author')) self.table.setHorizontalHeaderItem(0, self.auth_col) self.auth_col.setIcon(self.blank_icon) self.aus_col = QTableWidgetItem(_('Author sort')) self.table.setHorizontalHeaderItem(1, self.aus_col) self.aus_col.setIcon(self.up_arrow_icon) self.aul_col = QTableWidgetItem(_('Link')) self.table.setHorizontalHeaderItem(2, self.aul_col) self.aus_col.setIcon(self.blank_icon) # Add the data self.authors = {} auts = db.get_authors_with_ids() self.table.setRowCount(len(auts)) select_item = None for row, (id, author, sort, link) in enumerate(auts): author = author.replace('|', ',') self.authors[id] = (author, sort, link) aut = tableItem(author) aut.setData(Qt.UserRole, id) sort = tableItem(sort) link = tableItem(link) self.table.setItem(row, 0, aut) self.table.setItem(row, 1, sort) self.table.setItem(row, 2, link) if id == id_to_select: if select_sort: select_item = sort elif select_link: select_item = link else: select_item = aut self.table.resizeColumnsToContents() if self.table.columnWidth(2) < 200: self.table.setColumnWidth(2, 200) # set up the cellChanged signal only after the table is filled self.table.cellChanged.connect(self.cell_changed) # set up sort buttons self.sort_by_author.setCheckable(True) self.sort_by_author.setChecked(False) self.sort_by_author.clicked.connect(self.do_sort_by_author) self.author_order = 1 self.table.sortByColumn(1, Qt.AscendingOrder) self.sort_by_author_sort.clicked.connect(self.do_sort_by_author_sort) self.sort_by_author_sort.setCheckable(True) self.sort_by_author_sort.setChecked(True) self.author_sort_order = 1 self.recalc_author_sort.clicked.connect(self.do_recalc_author_sort) self.auth_sort_to_author.clicked.connect(self.do_auth_sort_to_author) # Position on the desired item if select_item is not None: self.table.setCurrentItem(select_item) self.table.editItem(select_item) self.start_find_pos = select_item.row() * 2 + select_item.column() else: self.table.setCurrentCell(0, 0) self.start_find_pos = -1 # set up the search box self.find_box.initialize('manage_authors_search') self.find_box.lineEdit().returnPressed.connect(self.do_find) self.find_box.editTextChanged.connect(self.find_text_changed) self.find_button.clicked.connect(self.do_find) l = QLabel(self.table) self.not_found_label = l l.setFrameStyle(QFrame.StyledPanel) l.setAutoFillBackground(True) l.setText(_('No matches found')) l.setAlignment(Qt.AlignVCenter) l.resize(l.sizeHint()) l.move(10, 20) l.setVisible(False) self.not_found_label.move(40, 40) self.not_found_label_timer = QTimer() self.not_found_label_timer.setSingleShot(True) self.not_found_label_timer.timeout.connect( self.not_found_label_timer_event, type=Qt.QueuedConnection) self.table.setContextMenuPolicy(Qt.CustomContextMenu) self.table.customContextMenuRequested.connect(self.show_context_menu)
def insertItems(self, row, items): """ Insert the <items> specified items in this list widget. The list widget shows item name string , as a QListwidgetItem. This QListWidgetItem object defines a 'key' of a dictionary (self._itemDictionary) and the 'value' of this key is the object specified by the 'item' itself. Example: self._itemDictionary['C6'] = instance of class Atom. @param row: The row number for the item. @type row: int @param items: A list of objects. These objects are treated as values in the self._itemDictionary @type items: list @param setAsDefault: Not used here. See PM_ListWidget.insertItems where it is used. @see: self.renameItemValue() for a comment about self._suppress_itemChanged_signal """ #self.__init__ for a comment about this flag self._suppress_itemChanged_signal = True #Clear the previous contents of the self._itemDictionary self._itemDictionary.clear() #Clear the contents of this list widget, using QListWidget.clear() #See U{<http://doc.trolltech.com/4.2/qlistwidget.html>} for details self.clear() seq = ['Node name', 'Number of bases'] self.setHorizontalHeaderLabels(seq) self.setRowCount(len(items)) idx = 0 self.setSortingEnabled(False) for item in items: if hasattr(item.__class__, 'name'): itemName = item.name else: itemName = str(item) numberOfBasesString = '' if isinstance(item, self.win.assy.DnaStrand): numberOfBasesString = str(len(item.getAllAtoms())) elif isinstance(item, self.win.assy.DnaSegment): numberOfBasesString = str(item.getNumberOfBasePairs()) tableWidgetItem = QTableWidgetItem(itemName) ###When we support editing list widget items , uncomment out the ###following line . See also self.editItems -- Ninad 2008-01-16 ##tableWidgetItem.setFlags( tableWidgetItem.flags()| Qt.ItemIsEditable) if hasattr(item.__class__, 'iconPath'): try: tableWidgetItem.setIcon(geticon(item.iconPath)) except: print_compact_traceback() self._itemDictionary[tableWidgetItem] = item self.setItem(idx, 0, tableWidgetItem) tableWidgetItem_column_2 = QTableWidgetItem(numberOfBasesString) tableWidgetItem_column_2.setFlags(Qt.ItemIsEnabled) self.setItem(idx, 1, tableWidgetItem_column_2) idx += 1 #Reset the flag that temporarily suppresses itemChange signal. self._suppress_itemChanged_signal = False self.setSortingEnabled(True)
def residuals2(self): self.AObs = self.posterioriValue * self.A * (self.A.T * self.P * self.A)**-1 * self.A.T self.cofactorM = self.A * (self.A.T * self.P * self.A)**-1 * self.A.T self.AResObs = self.posterioriValue * ( self.P**-1 - self.A * (self.A.T * self.P * self.A)**-1 * self.A.T) # print (self.A.T*self.P*self.A)**-1 # print self.posterioriValue # print self.posterioriValue*(self.A.T*self.P*self.A)**-1 self.cofactorAObs.clear() self.cofactorZ.clear() self.residA = OrderedDict() self.residARe = OrderedDict() # print self.cofactorM count = 0 for i, j in self.obs.iteritems(): for k, l in j.iteritems(): count += 1 self.obsCount = count self.cofactorAObs.setColumnCount(count) self.cofactorAObs.setRowCount(count) self.cofactorZ.setColumnCount(count) self.cofactorZ.setRowCount(count) for i in range(count): for j in range(count): temp = QTableWidgetItem() temp.setText(str(self.cofactorM[i, j])) self.cofactorAObs.setItem(i, j, temp) for i in range(count): for j in range(count): temp = QTableWidgetItem() temp.setText(str(self.AResObs[i, j])) self.cofactorZ.setItem(i, j, temp) i = 0 for x, sta in self.obs.iteritems(): for tn, tar in sta.iteritems(): name = x # name=x[0:-2] if not self.residA.has_key(x + tn): self.residA[x + tn] = [None] if not self.residARe.has_key(x + tn): self.residARe[x + tn] = [None] self.residA[x + tn][0] = sqrt(self.AObs[i, i]) self.residARe[x + tn][0] = sqrt(self.AResObs[i, i]) i += 1 # print self.residA # print self.residARe for x, sta in self.obs.iteritems(): for tn, target in sta.iteritems(): name = x + tn item1 = QTreeWidgetItem(self.stdDevAtree) item2 = QTreeWidgetItem(self.stdDevObsTree) if tn[-1] == "D": item1.setText(0, "Direction from" + x + "to :" + tn[0:-2]) item2.setText(0, "Direction from" + x + "to :" + tn[0:-2]) elif tn[-1] == "d": item1.setText(0, "Distance from" + x + "to :" + tn[0:-2]) item2.setText(0, "Distance from" + x + "to :" + tn[0:-2]) item1.setText(1, str(round(float(self.residA[name][0]), 3))) item2.setText(1, str(round(float(self.residARe[name][0]), 3)))
def __init__(self, window, cat_name, tag_to_match, data, sorter): QDialog.__init__(self, window) Ui_TagListEditor.__init__(self) self.setupUi(self) # Put the category name into the title bar t = self.windowTitle() self.setWindowTitle(t + ' (' + cat_name + ')') # Remove help icon on title bar icon = self.windowIcon() self.setWindowFlags(self.windowFlags()&(~Qt.WindowContextHelpButtonHint)) self.setWindowIcon(icon) # Get saved geometry info try: self.table_column_widths = \ gprefs.get('tag_list_editor_table_widths', None) except: pass # initialization self.to_rename = {} self.to_delete = set([]) self.original_names = {} self.all_tags = {} self.counts = {} for k,v,count in data: self.all_tags[v] = k self.counts[v] = count self.original_names[k] = v # Set up the column headings self.down_arrow_icon = QIcon(I('arrow-down.png')) self.up_arrow_icon = QIcon(I('arrow-up.png')) self.blank_icon = QIcon(I('blank.png')) self.table.setColumnCount(3) self.name_col = QTableWidgetItem(_('Tag')) self.table.setHorizontalHeaderItem(0, self.name_col) self.name_col.setIcon(self.up_arrow_icon) self.count_col = QTableWidgetItem(_('Count')) self.table.setHorizontalHeaderItem(1, self.count_col) self.count_col.setIcon(self.blank_icon) self.was_col = QTableWidgetItem(_('Was')) self.table.setHorizontalHeaderItem(2, self.was_col) self.count_col.setIcon(self.blank_icon) # Capture clicks on the horizontal header to sort the table columns hh = self.table.horizontalHeader(); hh.setClickable(True) hh.sectionClicked.connect(self.header_clicked) hh.sectionResized.connect(self.table_column_resized) self.name_order = 0 self.count_order = 1 self.was_order = 1 # Add the data select_item = None self.table.setRowCount(len(self.all_tags)) for row,tag in enumerate(sorted(self.all_tags.keys(), key=sorter)): item = NameTableWidgetItem(tag) item.setData(Qt.UserRole, self.all_tags[tag]) item.setFlags (item.flags() | Qt.ItemIsSelectable | Qt.ItemIsEditable) self.table.setItem(row, 0, item) if tag == tag_to_match: select_item = item item = CountTableWidgetItem(self.counts[tag]) # only the name column can be selected item.setFlags (item.flags() & ~(Qt.ItemIsSelectable|Qt.ItemIsEditable)) self.table.setItem(row, 1, item) item = QTableWidgetItem('') item.setFlags (item.flags() & ~(Qt.ItemIsSelectable|Qt.ItemIsEditable)) self.table.setItem(row, 2, item) # Scroll to the selected item if there is one if select_item is not None: self.table.setCurrentItem(select_item) self.delete_button.clicked.connect(self.delete_tags) self.rename_button.clicked.connect(self.rename_tag) self.table.itemDoubleClicked.connect(self._rename_tag) self.table.itemChanged.connect(self.finish_editing) self.buttonBox.accepted.connect(self.accepted) self.search_box.initialize('tag_list_search_box_' + cat_name) self.search_button.clicked.connect(self.search_clicked) try: geom = gprefs.get('tag_list_editor_dialog_geometry', None) if geom is not None: self.restoreGeometry(QByteArray(geom)) else: self.resize(self.sizeHint()+QSize(150, 100)) except: pass
def populate_table_row(self, row, genre, tags): self.setItem(row, 0, ReadOnlyTableWidgetItem(genre)) tags_value = ', '.join(tags) # Add a widget under the cell just for sorting purposes self.setItem(row, 1, QTableWidgetItem(tags_value)) self.setCellWidget(row, 1, self.create_tags_edit(tags_value, row))
def _loadGroupBox1(self, pmGroupBox): """ Load widgets in group box. """ self.labelfont = QFont("Helvetica", 12) self.descriptorfont = QFont("Courier New", 12) self.headerdata = ['', 'ID', 'Set', 'Descriptor'] self.set_names = ["Any", "Same", "Locked", "Polar", "Apolar"] self.rosetta_set_names = ["ALLAA", "NATRO", "NATAA", "POLAR", "APOLA"] self.descriptor_list = [ "GAVILMFWCSTYNQDEHKRP", "____________________", "____________________", "________CSTYNQDEHKR_", "GAVILMFW___________P" ] self.descriptorsTable = PM_TableWidget(pmGroupBox) self.descriptorsTable.setFixedHeight(100) self.descriptorsTable.setRowCount(len(self.set_names)) self.descriptorsTable.setColumnCount(2) self.descriptorsTable.verticalHeader().setVisible(False) self.descriptorsTable.horizontalHeader().setVisible(False) for index in range(len(self.set_names)): item_widget = QTableWidgetItem(self.set_names[index]) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignCenter) self.descriptorsTable.setItem(index, 0, item_widget) item_widget = QTableWidgetItem(self.descriptor_list[index]) item_widget.setFont(self.descriptorfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignCenter) self.descriptorsTable.setItem(index, 1, item_widget) self.descriptorsTable.setRowHeight(index, 16) pass self.descriptorsTable.resizeColumnsToContents() self.applyDescriptorPushButton = PM_PushButton(pmGroupBox, text="Apply", setAsDefault=True) self.selectAllPushButton = PM_PushButton(pmGroupBox, text="All", setAsDefault=True) self.selectNonePushButton = PM_PushButton(pmGroupBox, text="None", setAsDefault=True) self.selectInvertPushButton = PM_PushButton(pmGroupBox, text="Invert", setAsDefault=True) self.win.connect(self.applyDescriptorPushButton, SIGNAL("clicked()"), self._applyDescriptor) self.win.connect(self.selectAllPushButton, SIGNAL("clicked()"), self._selectAll) self.win.connect(self.selectNonePushButton, SIGNAL("clicked()"), self._selectNone) self.win.connect(self.selectInvertPushButton, SIGNAL("clicked()"), self._invertSelection) buttonList = [('PM_PushButton', self.applyDescriptorPushButton, 0, 0), ('QSpacerItem', 5, 5, 1, 0), ('PM_PushButton', self.selectAllPushButton, 2, 0), ('PM_PushButton', self.selectNonePushButton, 3, 0), ('PM_PushButton', self.selectInvertPushButton, 4, 0)] self.buttonGrid = PM_WidgetGrid(pmGroupBox, widgetList=buttonList) self.recenterViewCheckBox = \ PM_CheckBox( pmGroupBox, text = "Re-center view", setAsDefault = True, state = Qt.Checked) self.sequenceTable = PM_TableWidget(pmGroupBox) #self.sequenceTable.setModel(self.tableModel) self.sequenceTable.resizeColumnsToContents() self.sequenceTable.verticalHeader().setVisible(False) #self.sequenceTable.setRowCount(0) self.sequenceTable.setColumnCount(4) self.checkbox = QCheckBox() self.sequenceTable.setFixedHeight(345) self.sequenceTable.setHorizontalHeaderLabels(self.headerdata)