Been programming a Kivy interface for a Caesar cypher I've done a few days ago and I'm running into an error (see title) I can't seem to get through. I'll put my code underneath, as well as the full traceback which can probably help.
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 (most recent call last):
File "", line 1, in runfile('C:/Users/danburnier/Desktop/PythonPrograms/AveCypher.py', >wdir='C:/Users/danburnier/Desktop/PythonPrograms')
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\site->packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile execfile(filename, namespace)
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\site->packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/danburnier/Desktop/PythonPrograms/AveCypher.py", line 152, in EpicApp().run()
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\site-packages\kivy\app.py", line 829, >in run root = self.build()
File "C:/Users/danburnier/Desktop/PythonPrograms/AveCypher.py", line 145, in build return StartPageKivy()
File "C:/Users/danburnier/Desktop/PythonPrograms/AveCypher.py", line 117, in init self.add_widget(self.message)
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\site-packages\kivy\uix\layout.py", >line 92, in add_widget fbind = widget.fbind
AttributeError: 'str' object has no attribute 'fbind'
Thanks in advance for your help.