我正在编写一个小python程序,它遍历一个XML文件并替换一些标记。它有三个参数,一个创建目录树的路径,读取的XML文件和输出到的XML文件。它只需在命令行中传递参数就可以正常工作。因为这不仅仅是为了我,我想我在上面加了个Qt。下面是Qt前端的大部分。MOVtoMXF是完成所有替换的类。所以你可以看到,我基本上只是抓住字符串,然后把它们输入我已经制作和测试过的类中。在
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)
问题是当我输入一个路径时,它会返回一个错误,要么是目录不存在,要么是结尾有一个斜杠
文件“/系统/库/框架”/Python.framework/Versions/2.5/lib/Python2.5/posixpath.py“,第62行,in join elif路径==''或路径.endswith('/'):
我想这可能是QFileDialog、其返回的QString和python所期望的字符串之间的不匹配。但我不知道该怎么修理它。在
我在Max OS X 10.5.6上运行 pyQt 4.4.4 QT 4.4.0版
谢谢你的帮助。在
马克
两种可能的解决方案。在
方法1:
如果必须使用displayText()方法,我建议您用显式字符串转换来包装对displayText()的调用:
原因是DePaseTeXTo()返回了我认为的C++级别的常量内存引用,这意味着您没有返回qScript的副本,但实际上QString内存中的任何可用的字符串都是可用的。在当您调用displayText()函数时,它是您期望的字符串,但最终当内存引用的内容发生更改时,它将是另一个字符串。我注意到了不同控件上的几个方法的这种特殊性,最明显的是QDateEdit/QDateTimeEdit/QTimeEdit控件,在这里我通常需要显式地复制QDate,比如说,QDateEdit的date()函数返回的QDate被包装在QDate构造函数中。在
方法2:
否则,请改用text()方法。返回的QString是一个常量值,而不是一个常量内存引用。参见本文件:
http://doc.trolltech.com/4.4/qlineedit.html#text-prop
^{pr2}$更新:
看起来Riverbank将在PyQt的未来版本中解决此问题,以防有人仍有此问题:
PyQt4 Roadmap
相关问题 更多 >
编程相关推荐