PyQt Quickie: command line parsing
So, you are writing a PyQt app, and you want it to support command line arguments. So you do something like this:
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.
OptParser is going to tell you it's not a valid option and abort
You will ignore the option and not do anything useful with it
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:
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.
I'm surprise I did this correctly without knowing that I was correctly parsing the qt args.. luck I suppose :)