You should take a look at the setData function. That should enable you to add int's and automatically get correct number sorting.
Cheers, Erik On Wed, Jul 3, 2013 at 8:43 AM, Sean Fisk <s...@seanfisk.com> wrote: > Hi David, > > I‘ve wanted to do this before. I don’t think it's possible to use > QInputDialog.getInt() without a spin box, so constructing a custom > QDialogseems like the proper solution. I've also include a solution with > QInputDialog, but that doesn't restrict the user to positive integers > only. Just give it a try and you'll see what I mean. I personally like the > QDialog way. > > I wasn't exactly sure what you meant by the sorting, so I just threw the > integers in a QListWidget. Unfortunately, the QListWidget sorting > algorithm<http://qt-project.org/doc/qt-4.8/qlistwidget.html#sortingEnabled-prop>sorts > lexicographically, not numerically. So I just used Python‘s list sort > and re-added all the numbers to the list. Not the nicest solution, but it > works. That shouldn’t be too hard to adapt to QTreeWidget. > > Let me know if I misunderstood any part of your question. > > ~ Sean > > Here is the code: > > #!/usr/bin/env python > # Prompt the user for an integer and display it in a sorted list.# Python 2.7 > code > from PySide import QtGui, QtCore > class MainWindow(QtGui.QMainWindow): > def __init__(self, parent=None): > super(MainWindow, self).__init__(parent) > > self._int_list = [] > > self.setCentralWidget(QtGui.QWidget()) > > self._layout = QtGui.QVBoxLayout(self.centralWidget()) > self._int_list_widget = QtGui.QListWidget() > self._layout.addWidget(self._int_list_widget) > > self._add_int_qinputdialog_button = QtGui.QPushButton( > 'Add integer (QInputDialog)') > self._add_int_qinputdialog_button.clicked.connect( > self._add_int_qinputdialog) > self._layout.addWidget(self._add_int_qinputdialog_button) > > self._add_int_qdialog_button = QtGui.QPushButton( > 'Add integer (Custom QDialog)') > self._add_int_qdialog_button.clicked.connect( > self._add_int_qdialog) > self._layout.addWidget(self._add_int_qdialog_button) > > def _complain_about_integer(self): > QtGui.QMessageBox.critical( > self, 'Invalid Input', 'Please enter a positive integer.') > > def _add_int_to_list(self, text): > try: > integer = int(text) > except ValueError: > self._complain_about_integer() > return > if integer < 0: > # For the QInputDialog solution, since it doesn't prevent > # negatives. > self._complain_about_integer() > return > self._int_list.append(integer) > self._int_list.sort() > self._int_list_widget.clear() > self._int_list_widget.addItems( > [str(integer) for integer in self._int_list]) > > def _add_int_qinputdialog(self): > text, ok = QtGui.QInputDialog.getText( > self, 'Values id Dialog', 'Enter Id of the Value', > inputMethodHints=QtCore.Qt.ImhDigitsOnly) > if not ok: > # User closed the dialog. > return > self._add_int_to_list(text) > > def _add_int_qdialog(self): > dialog = IntDialog() > accepted = dialog.exec_() > if accepted == QtGui.QDialog.Rejected: > # User closed the dialog. > return > self._add_int_to_list(dialog.int_text) > class IntDialog(QtGui.QDialog): > def __init__(self, parent=None): > super(IntDialog, self).__init__(parent) > > self.setWindowTitle('Values id Dialog') > > self._layout = QtGui.QFormLayout(self) > > self._input_field = QtGui.QLineEdit() > self._int_validator = QtGui.QIntValidator() > self._int_validator.setBottom(0) > self._input_field.setValidator(self._int_validator) > > self._layout.addRow('Enter Id of the Value', self._input_field) > > self._button_box = QtGui.QDialogButtonBox( > QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) > self._button_box.accepted.connect(self.accept) > self._button_box.rejected.connect(self.reject) > self._layout.addWidget(self._button_box) > > @property > def int_text(self): > return self._input_field.text() > def main(argv): > app = QtGui.QApplication(argv) > > w = MainWindow() > w.show() > w.raise_() > return app.exec_() > if __name__ == '__main__': > import sys > raise SystemExit(main(sys.argv)) > > On Tue, Jul 2, 2013 at 2:05 PM, <litltb...@gmail.com> wrote: > > 1. I want to get input from a user it will be an integer. I'm trying >> valueId, ok = QtGui.QInputDialog.getInt(self, 'Values id Dialog', >> 'Enter Id of the Value', minValue=0) >> >> and it always show a spin box. How do i remove the spin box. >> >> 2. When I display the int I use: >> item_0 = QtGui.QTreeWidgetItem(self.ValuesTree) >> item_0.setText(0, str(value.valueId)) >> >> Is there a way to display int's to the screen as nit's so they >> can be sorted/displayed in numerical order? >> >> ie 11, 12, 104 >> not 104, 11, 12. >> >> David >> _______________________________________________ >> PySide mailing list >> PySide@qt-project.org >> http://lists.qt-project.org/mailman/listinfo/pyside >> > -- > Sean Fisk > > _______________________________________________ > PySide mailing list > PySide@qt-project.org > http://lists.qt-project.org/mailman/listinfo/pyside > >
_______________________________________________ PySide mailing list PySide@qt-project.org http://lists.qt-project.org/mailman/listinfo/pyside