QFileDialog通过目录python脚本
题
我写的是通过一个XML文件中去,并做了一些更换的标签有点Python程序。它采用三个参数,从whcih它会创建一个目录树的路径,XML文件的阅读和XML文件的输出到。它的工作原理,从刚刚传递参数的命令行罚款。由于它不只是对我来说,我认为Id把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)
的万阿英,蒋达清是,当我在一个轨迹进给,它现在以错误回来,无论是目录犯规存在,或者如果我有在端尾随斜线那
文件 “/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/posixpath.py”,第62行,在加入 elif的路径== '' 或path.endswith( '/'):
我认为它可能是QFileDialog之间有一些不匹配,则其QString的回传和字符串我的Python的期望。但林不知道如何去修复它。
林上最大OS X 10.5.6运行 PyQt的4.4.4 QT 4.4.0
感谢任何帮助,您可以给。
标记
解决方案
两种潜在的解决办法。
方法1:
如果你必须使用displayText()方法,我建议你用一个明确的字符串投包调用displayText():
path = str(self.pathBox.displayText())
xmlFile = str(self.xmlFileBox.displayText())
outFileName = str(self.outfileNameBox.displayText())
原因是,displayText()返回我相信这是在C ++水平恒定的内存引用,这意味着你没有被返回的字符串的副本,但实际上任何的QString可在内存引用。
当你调用displayText()函数,这是你所期望的字符串,但最终它是别的东西当在内存引用的内容被改变。我已经注意到了这个特点与不同的控制多种方法,最值得注意的是QDateEdit / QDateTimeEdit / QTimeEdit控制,在那里我通常通过在包装它做的,比方说一个明确的拷贝,通过QDateEdit之日起()函数返回的QDATE QDATE构造。
方法2:
否则,使用文本()方法来代替。返回的QString是而不是常量存储器参考的恒定值。看到这个文档:
http://doc.trolltech.com/4.4/qlineedit.html #文本 - 丙
displayText : const QString
text : QString
<强>更新强>
它看起来像河岸将在任何情况下PyQt的的未来版本中寻址仍然有这个问题此问题:
常量的隐式复制和
实现。在当前快照。
当PyQt的包装一个const&值 由C ++函数它包装返回 价值本身的地址。也, 它不强制常量 属性。这可能会导致意外 水煤浆(和程序崩溃)任一 由基础值消失 或值是出乎意料 修改。
到正确的操作方式是 明确作出值的副本 使用它的类型的拷贝构造函数。 然而,这并不符合Python和 知道它需要做的事情 需要C ++ API的知识。
PyQt的将被改变,这样它会 自动调用拷贝 构造函数和将包装的副本。