--- author: '' category: '' date: 2012/02/24 02:38 description: '' link: '' priority: '' slug: BB997 tags: kde, pyqt, python, qt title: 'PyQt Quickie: command line parsing' type: text updated: 2012/02/24 02:38 url_type: '' --- So, you are writing a PyQt app, and you want it to support command line arguments. So you do something like this: .. code-block:: Python opt_parser = OptionParser() opt_parser.add_option("-q", dest="quickly", action="store_true", help="Do it quickly (default=False)") (options, args) = opt_parser.parse_args(sys.argv) app = QApplication(sys.argv) : : : Or maybe even ``QApplication([])``. Ok, you are doing it wrong. And this is wrong in most tutorials, too. Why? Because Qt (and thus PyQt) supports `a bunch of useful command line options already `_. So if you do it like in the first listing, and pass "-style=oxygen" or whatever, one of the following will happen. a) OptParser is going to tell you it's not a valid option and abort b) You will ignore the option and not do anything useful with it c) You will have your own -style option and do *two* things with it All three outcomes are less than ideal. The right way to do this is: .. code-block:: Python opt_parser = OptionParser() opt_parser.add_option("-q", dest="quickly", action="store_true", help="Do it quickly (default=False)") app = QApplication(sys.argv) (options, args) = opt_parser.parse_args(app.arguments()) : : : This way, you give PyQt a chance to process the options it recognizes, and, then, you get to handle the rest, because ``app.arguments()`` has all Qt options removed. The bad side of this is, you will make ``--help`` slightly slower, since it will have to build a ``QApplication`` to do nothing, and you will have undocumented options. Solution for both problems left as an exercise.