AttributeError: у объекта 'str' нет атрибута 'fbind', ошибка при использовании kivy в Python - PullRequest
0 голосов
/ 04 февраля 2020

Я программировал интерфейс Kivy для шифра Цезаря. Я сделал несколько дней go и столкнулся с ошибкой (см. Заголовок). Кажется, я не могу пройти. Я положу свой код внизу, а также полную трассировку, которая, вероятно, может помочь.

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button

class Cypher:

    def __init__(self):

        MAX_KEY_SIZE = 26


    '''def getMode(self)        

        while True:



            print('Do you wish to encrypt or decrypt a message?')
            mode = input().lower()
            if mode in 'encrypt e decrypt d'.split():
                return mode
            else:
                print('Enter either "encrypt" or "e" or "decrypt" or "d".')'''

    def getMessage(self):

            print('Enter your message:')
            return input()

    def getKey(self):

            key = 0
            while True:
                print('Enter the key number (1-%s)' % (MAX_KEY_SIZE))
                key = int(input())
                if (key >= 1 and key <= MAX_KEY_SIZE):
                    return key

    def getTranslatedMessage(self, mode, message, key):

        '''if mode[0] == 'd':
            key = -key'''

        self.msg = ''

        self.msg += message

        translated = ''

        for char in self.msg:
            if char.isalpha():
                num = ord(char)
                num += key
                if char.isupper():
                    if num > ord('Z'):
                        num -= 26
                    elif num < ord('A'):
                        num += 26
                elif char.islower():
                    if num > ord('z'):
                        num -= 26
                    elif num < ord('a'):
                        num += 26
                translated += chr(num)
            else:
                translated += char

        return translated

    def func(self):

        mode = self.getMode()
        message = self.getMessage()

        key = self.getKey()


#    print('Your translated text is:')

        return self.getTranslatedMessage(mode, message, key)


class StartPageKivy(GridLayout):

    def __init__(self, **kwargs):

        super().__init__(**kwargs)

        c = Cypher()

        self.cols = 2

        self.encButton = Button(text='Encrypt')
        self.encButton.bind(on_press = self.encryptionMode)
        self.add_widget(self.encButton)
        self.decButton = Button(text='Decrypt')
        self.decButton.bind(on_press = self.decryptionMode)
        self.add_widget(self.decButton)

        self.add_widget(Label(text='Insert the key'))
        self.key = TextInput(multiline=False)
        self.add_widget(self.key)

        self.add_widget(Label(text='Insert the message'))
        self.message =  TextInput(multiline=False).text
        self.add_widget(self.message)

        self.add_widget(Label(text='The result is :'))

        self.mode = ''

        while self.mode not in 'e d':

            if self.encryptionMode() == True:
                self.mode = 'e'
            elif self.decryptionMode() == True:
                self.mode = 'd'

        self.result = c.getTranslatedMessage(self.mode, self.message, self.key)

        self.add_widget(Label(text=self.result))

    def encryptionMode(self, instance):

        return True

    def decryptionMode(self, instance):

        return True

class EpicApp(App):

    def build(self):

        return StartPageKivy()

class StartPageTkinter():

    pass

if __name__ == '__main__':
    EpicApp().run()

runfile ('C: / Users / danburnier / Desktop / PythonPrograms / AveCypher.py ',> wdir =' C: / Users / danburnier / Desktop / PythonPrograms ') Traceback (последний вызов был последним):

File "", строка 1, в runfile (' C: / Users / danburnier / Desktop / PythonPrograms / AveCypher.py ',> wdir =' C: / Users / danburnier / Desktop / PythonPrograms ')

Файл "C: \ Users \ danburnier \ AppData \ Локальный \ Continuum \ anaconda3 \ lib \ site-> packages \ spyder_kernels \ customize \ spydercustomize.py ", строка 827, в исполняемом файле исполняемого файла (имя файла, пространство имен)

Файл" C: \ Users \ danburnier \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-> packages \ spyder_kernels \ customize \ spydercustomize.py ", строка 110, в execfile exe c (компилировать (f.read (), имя файла, 'exe c' ), пространство имен)

Файл "C: / Users / danburnier / Desktop / PythonPrograms / AveCypher.py", строка 152, в EpicApp (). run ()

Файл "C: \ Users \ дан burnier \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ kivy \ app.py ", строка 829,> в прогоне root = self.build ()

Файл" C: /Users/danburnier/Desktop/PythonPrograms/AveCypher.py ", строка 145, в сборке return StartPageKivy ()

Файл" C: / Users / danburnier / Desktop / PythonPrograms / AveCypher.py ", строка 117, в init self.add_widget (self.message)

Файл "C: \ Users \ danburnier \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ kivy \ uix \ layout.py ",> строка 92, в add_widget fbind = widget.fbind

AttributeError: у объекта 'str' нет атрибута 'fbind'

Заранее спасибо за ваша помощь.

1 Ответ

2 голосов
/ 04 февраля 2020

У меня нет среды для запуска вашего кода, но, глядя на трассировку, я думаю, что проблема здесь:

    self.message =  TextInput(multiline=False).text
    self.add_widget(self.message)

Возможно, проблема в .text в конце первая строка. Я предполагаю, что текст (хранится в self.message здесь) не является допустимым виджетом. Попробуйте удалить «.text» или измените вторую строку на:

    self.add_widget(Label(text=self.message))
...