我写的是通过一个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的的未来版本中寻址仍然有这个问题此问题:

PyQt4的路线图

  

常量的隐式复制和

     

实现。在当前快照。

     

当PyQt的包装一个const&值   由C ++函数它包装返回   价值本身的地址。也,   它不强制常量   属性。这可能会导致意外   水煤浆(和程序崩溃)任一   由基础值消失   或值是出乎意料   修改。

     

到正确的操作方式是   明确作出值的副本   使用它的类型的拷贝构造函数。   然而,这并不符合Python和   知道它需要做的事情   需要C ++ API的知识。

     

PyQt的将被改变,这样它会   自动调用拷贝   构造函数和将包装的副本。

scroll top