pyside-uic でpyファイルを作るときは、リダイレクトではなく"-o"オプションを使う

2014-04-07(Mon) python

要約

windows(多分他のプラットフォームでも)でpyside-uicを使うときは

以下はダメで

pyside-uic mainwindow.ui > mainiwndow.py

以下を使うこと

pyside-uic -o mainiwndow.py mainwindow.ui

要約だけで終わるのもあれなので

事のいきさつ

内製ツールのGUIツールキットをWxWidgetなwxpythonからQtなPySideに切り替えてます。

ようやく環境と基礎的なことがわかってきたので、GUIデザイナー機能が入ってるQt Creator 2.8を使ってデザインしていました。 (PySideはQt4系の対応になっているので、Qt5に対応しているQt Creator 3.0でなくても良いかなと考えて、一つ古い2.8を使ってます)

PySide側でこのデザインしたファイル(uiファイル)を使うときは、pyside-uicを使います。 で、具体的にはこういうふうにコマンドを打ってました。

pyside-uic mainwindow.ui > mainiwndow.py

これだと

SyntaxError: Non-ASCII character '\xff' in file C:\devel\qt-widget-exam1\mainwindow.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

が出てしまう。1行目にNon ASCIIな文字?

mainwindow.pyの1行目にはpyside-uicで自動生成された、pythonファイルのFile Encoding情報が書かれている。ちなみにUTF-8でファイル自体もUTF-8でした。

pyside-uic側が悪いの?と本格的に検索してみたら、Stack Overflowに行き着いて見ていたら

Python code genration with pyside-uic - Stack Overflow

直接今回の問題には関係ありませんが、pyside-uicにある -o オプションで作るといいと書かれているのでその通りにやると

pyside-uic -o mainiwndow.py mainwindow.ui

このオプションで生成したファイルは確かに問題ありませんでした。

windowsのcmdやpowershellの出力結果をリダイレクトでに書き出すと起きてしまうようですね?

そういえば、pyside-uicを使い始めた頃はこれでやってたわ・・・なぜ変えたし

蛇足

pyside-uicのオプションにはインデントの指定もできるんですね。素晴らしいです。