Python: TypeError: QString.__getitem__(): аргументы не соответствуют ни одному перегруженному вызову

Я создаю функцию, которая использует словарь для замены слов в текстовом файле, т. Е. Если в файле встречается первая пара слов, она заменяется второй. Кроме того, созданная функция вызывается, когда виджет в GUI задействован пользователем. Таким образом, все созданные функции существуют внутри класса пользовательского интерфейса. (надеюсь, это имеет смысл). Я использую питон

Словарь выглядит следующим образом (dictlist = {'test':'rest', 'happy':'sad', 'big':'small'}). Функция отлично работает, когда написана непосредственно в редакторе Python, но когда я копирую ее в переведенный код.ui, я получаю ошибку ниже. Может кто-нибудь посоветовать, почему это происходит. Я новичок в этом, так что надеюсь, что мое объяснение имеет смысл.

line = rpairs(line, dictlist)
line 1486, in rpairs
temp = temp.replace(key, dictlist[key])
TypeError: QString.__getitem__(): arguments did not match any overloaded call:
overload 1: argument 1 has unexpected type 'QString'
overload 2: argument 1 has unexpected type 'QString'

def temp(self):
    import string
    global filename
    global mytemp
    dictlist = self.lineEdit_dict.text()
    filename2 = self.lineEdit_outputfilename.text()

    f1 = open(filename, 'r')      
    f2 = open('filename2', 'w')

    def  rpairs (temp, dictlist):
        for key in dictlist:
            temp = temp.replace(key, dictlist[key])
        return temp

    for line in f1:
        line = rpairs(line, dictlist)
        f2.write(line)
    f2.close()
    return mytemp

1 ответ

Решение

Вы инициализировали dictlist с QString не dict:

dictlist = self.lineEdit_dict.text()

пока вы пытались получить к нему доступ как к dict: dictlist[key]

У вас также есть много других проблем, таких как f2 = open('filename2', 'w') должно быть f2 = open(filename2, 'w')

Другие вопросы по тегам