سؤال

ايم كتابة برنامج بيثون قليلا يمر عبر ملف XML ويفعل بعض استبدال العلامات. يستغرق ثلاث حجج، وهو مسار من WHCIH يقوم بإنشاء شجرة دليل، وملف XML قراءته وملف XML إخراجه إليه. إنه يعمل بشكل جيد من سطر الأوامر فقط يمر في الحجج. كما ليس فقط بالنسبة لي، فكرت معرف وضع جبهة كيو تي عليه. أدناه هي غالبية الجبهة كي تي. 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)

probelm هو أنه عندما أطعم في طريق، عاد الآن مع خطأ، إما أن يكون الدليل موجود، أو إذا كان لدي مائل زائدة في النهاية

ملف "/System /Library/frameworks/python.framework/Versions/2.5/lib/python2.5/posixpath.py"، السطر 62، في الانضمام إلى مسار ELIF == '' أو path.endswith ('/')

أعتقد أنه ربما يكون هناك عدم تطابق بين QFileDialog، و Qstring Back Back و String The My Python تتوقع. لكنني لست متأكدا من كيفية الذهاب حول إصلاحه.

IM يعمل على ماكس 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، ولكن في الواقع مهما كانت QString متوفرة في مرجع الذاكرة.

عند استدعاء دالة DisplayText ()، فهذه السلسلة التي توقعتها، ولكن في النهاية، في النهاية شيء آخر عند تغيير المحتويات في مرجع الذاكرة. لقد لاحظت هذه الخصائص بعدة طرق حول عناصر التحكم المختلفة، وأبرزها QDATEEDIT / QDATETIMEEDITIT / QTIMEDIT، حيث عادة ما يجب أن أقول نسخة صريحة من، كما تم إرجاع QDate بواسطة وظيفة QDATEDIT عن طريق التفاف في موكيد QDate.

الطريقة 2:

خلاف ذلك، استخدم طريقة النص () بدلا من ذلك. تعد QString Relowed قيمة ثابتة، بدلا من مرجع ذاكرة ثابت. انظر هذا الوثيقة:

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

displayText : const QString 
text : QString

تحديث:

يبدو أن Riverbank سوف يعالج هذه المشكلة في الإصدارات المستقبلية من Pyqt في حالة أي شخص ما زال لديه هذه المشكلة:

خارطة الطريق PYQT4

نسخ ضمنية من const &

نفذت في اللقطات الحالية.

عندما يلف Pyqt Const & Value الذي تم إرجاعه بواسطة وظيفة C ++، فإنه يلتف عنوان القيمة نفسه. أيضا، لا ينفذ سمة const. يمكن أن يتسبب ذلك في تحطم سلوك غير متوقع (وتعطل البرامج) إما عن طريق تخفيف القيمة الأساسية أو القيمة التي يتم تعديلها بشكل غير متوقع.

الطريقة الصحيحة للتعامل مع هذا هي إنشاء نسخة صريحة من القيمة باستخدام منشئ نسخ نوعه. ومع ذلك، فإن هذا ليس بيثونيك ومعرفة أنه يتعين القيام به يتطلب معرفة API C ++.

سيتم تغيير Pyqt بحيث ستحصل تلقائيا على منشئ النسخ وسيتم لف النسخة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top