2009-04-11 8 views
1

XMLファイルを通過してタグを置き換える小さなPythonプログラムを記述しています。 3つの引数をとります。ディレクトリツリーを作成するパス、XMLファイルの読み込み、XMLファイルの出力先です。引数を渡すだけでコマンドラインから正常に動作します。それだけではなく、私はIDがQtを前面に置いていると思った。以下はQtのフロントの大部分です。 MOVtoMXFはすべての置換を行うクラスです。だから、基本的に弦をつかんで、すでに作成してテストしたクラスにそれらを供給するだけです。QFileDialogでpythonスクリプトにディレクトリを渡す

class Form(QDialog): 

    def ConnectButtons(self): 
     self.connect(self.pathBrowseB, SIGNAL("clicked()"), self.pathFileBrowse) 
     self.connect(self.xmlFileBrowseB, SIGNAL("clicked()"), self.xmlFileBrowse) 
     self.connect(self.outputFileBrowseB, SIGNAL("clicked()"), self.outputFileBrowse) 

    def accept(self): 
     path = self.pathBox.displayText() 
     xmlFile = self.xmlFileBox.displayText() 
     outFileName = self.outfileNameBox.displayText() 
     print path + " " + xmlFile + " " + outFileName 
     mov1 = MOVtoMXF.MOVtoMXF(path, xmlFile, outFileName) 
     mov1.ScanFile() 
     self.done() 

    def pathFileBrowse(self): 
     file = str(QFileDialog.getExistingDirectory(self, "Select Directory")) 
     self.pathBox.setText(file) 

    def xmlFileBrowse(self): 
     file = str(QFileDialog.getOpenFileName(self, "Save File")) 
     self.xmlFileBox.setText(file) 

    def outputFileBrowse(self): 
     file = str(QFileDialog.getSaveFileName(self, "Save File")) 
     self.outfileNameBox.setText(file) 

probelmは/私は最後

ファイルの末尾にスラッシュを持っている場合は、」私は道にフィードするとき、それは今エラーで戻ってくる、どちらか存在するdoesntのディレクトリ、またはということですシステム/ライブラリ/フレームワーク/ Python.framework/Versions/2.5/lib/python2.5/posixpath.py "、行62、結合中 elif path == ''またはpath.endswith( '/'):

QFileDialogとそのQStringとの間のいくつかの不一致と、私のpythonが期待している文字列が間違っていると思います。しかし、それを修正する方法についてはわかりません。 QT 4.4.0 PyQtは4.4.4 10.5.6マックスOS X上で、あなたが与えることができる任意の助け

感謝を実行している

イム。

マーク

+0

スクリプトにコードを投稿することはできますか?と正確なエラーメッセージ? –

答えて

1

2つの潜在的な解決策。

方法1:

あなたがのdisplayText()メソッドを使用する必要がある場合、私はあなたが明示的な文字列のキャストでのdisplayText()への呼び出しをラップ勧め:

path = str(self.pathBox.displayText()) 
xmlFile = str(self.xmlFileBox.displayText()) 
outFileName = str(self.outfileNameBox.displayText()) 

理由は、のdisplayText( )は、私がC++レベルでの定数メモリ参照であると考えるものを返します。つまり、QStringのコピーは返されませんが、実際にはQStringはメモリ参照で使用できます。

displayText()関数を呼び出すと、期待した文字列になりますが、最終的にはメモリ参照の内容が変更されたときには別のものになります。 QDateEdit/QDateTimeEdit/QTimeEditコントロールなど、さまざまなコントロールのいくつかのメソッドにこのような特異性があることが気づきました。QDateEditのdate()関数によって返されたQDateを明示的にコピーする必要があります。 QDateコンストラクタ。

方法2:

それ以外の場合は、代わりにtext()メソッドを使用します。返されるQStringは、定数メモリ参照ではなく、定数値です。このドキュメントを参照してください。

http://doc.trolltech.com/4.4/qlineedit.html#text-prop

displayText : const QString 
text : QString 

更新:

リバーバンクは、誰もが、まだこの問題が発生している場合にはPyQtは、将来のバージョンでこの問題に対処されますように見えます

PyQt4 Roadmap

constの暗黙的コピー&

現在のスナップショットで実装されています。

PyQtがconst &値 をC++関数によって返したとき、それは 値自体のアドレスをラップします。また、 は、const 属性を強制しません。これは予想外に が変更されて 消滅根底にある値または値によって予期しない behavour(とプログラムがクラッシュ)のいずれか を引き起こす可能性があります。

これを処理する正しい方法は、 の型のコピーコンストラクタを使用して、値 のコピーを明示的に作成することです。 しかし、これはPythonicではなく、 は完了する必要があることを知っています。 はC++ APIに関する知識が必要です。

が自動的にコピー コンストラクタを呼び出し、コピーをラップするようにPyQtが変更されます。

関連する問題