gui中的意外行为

时间:2014-04-06 15:13:16

标签: python pyqt python-2.x

连续两天我都遇到了一个奇怪的错误,我无法理解问题是要求你提供帮助。我有一个独特的功能。

def find_config(self, path):
    dic = list(path.split('/'))
    print dic
    size = len(dic)
    print '/'.join(dic)

当我在类构造函数中运行它时,它工作正常,但是当我在事件处理程序按钮内运行它时,它会挂起在join函数上。

构造

class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
            QMainWindow.__init__(self)
            self.setupUi(self)
            self.filepath = ""
            self.action_Open.activated.connect(self.file_open_func)

            print self.find_config('/home/juster/asdfa/main.c')

处理程序按钮:

def file_open_func(self, path = 0):

    try:
        self.filepath = 0;
        if not path:        
            self.filepath = QFileDialog.getOpenFileName(self, 'Open file', self.rootpath, "C/C++ (*.c);; All (*.*);; Makefile (makefile)")  
        else:
            self.filepath = path

        print self.find_config(self.filepath)
        f = open(self.filepath, 'a+')

看看我为终端变量dic带来了什么?

来自constuctor的函数find_config:

['', 'home', 'juster', 'asdfa', 'main.c']

函数find_config来自handler:

[PyQt4.QtCore.QString(u''), PyQt4.QtCore.QString(u'home'), PyQt4.QtCore.QString(u'juster'), PyQt4.QtCore.QString(u'asdfa'), PyQt4.QtCore.QString(u'main.c')]

这很神奇吗?

1 个答案:

答案 0 :(得分:1)

从处理程序调用时,path字符串看起来不像常规Python str,而是QT类QString的实例。这似乎适用于split,但不适用于join。我想如果你将它转换为str的常规字符串,你会发现问题消失了。

def find_config(self, path):
    dic = list(str(path).split('/')) # added str() call to this line
    print dic
    size = len(dic)
    print '/'.join(dic)

请注意,您的dic变量具有相当误导性的名称。这是一个列表,而不是字典,所以调用它dic要求混淆(虽然创建它时list调用似乎是不必要的)。我也不确定这个功能是做什么的。它似乎分裂了一个字符串,然后完全重新加入它。