2017-11-13 16 views
-2

시저 암호 프로그램 용 tkinter GUI를 만들었지 만 제대로 작동하지 않습니다. 첫 번째 입력란에 내 메시지를 입력하고 두 번째 입력란에 키를 입력 한 다음 암호화/암호 해독을 클릭하면 결과가 세 번째 입력란에 표시됩니다. 하지만 나는 정확한 결과를 얻지 못합니다. 또한 caesar 암호 용 Tkinter GUI가 의도 한대로 작동하지 않습니다.

가끔 내가 여러 단어를 6보다 높은 키를 사용하거나 입력하면, 나는 다음과 같은 오류가 발생합니다 :

from tkinter import * 

class Sezar(Frame): 
    def __init__(self,pencere): 
     Frame.__init__(self,pencere) 
     self.pencere = pencere 

     self.Lab1 = Label(pencere, text="Enter your message: ",relief= GROOVE, width=20).place(x=20,y=30) 

     self.Lab2 = Label(pencere, text="Enter key: ", relief=GROOVE, width=20).place(x=20, y=90) 

     self.Ent1 = Entry(pencere,width=30) 
     self.Ent1.place(x=170,y=30) 

     self.Ent2 = Entry(pencere,width=30) 
     self.Ent2.place(x=170,y=90) 

     self.But1 = Button(pencere, text="Encrypt", relief=GROOVE,font="bold",command= self.Encrypt).place(x=50,y=150) 
     self.But1 = Button(pencere, text="Decrypt", relief=GROOVE, font="bold",command= self.Decrypt).place(x=110, y=150) 

     self.RESULT = Entry(pencere, width=30) 
     self.RESULT.place(x=170,y=200) 

     self.LETTERS = "abcdefghijklmnopqrstuvwxyz" 
     self.translation = "" 


    def Encrypt(self): 
     for num in self.Ent1.get(): 
      if num in self.LETTERS: 
       sayı = self.LETTERS.find(num) 
       sayı = sayı + int(self.Ent2.get()) 
       self.translation = self.translation + self.LETTERS[sayı] 
       self.RESULT.insert(0,self.translation) 
      else: 
       self.translation = self.translation + num 


    def Decrypt(self): 
     for num in self.Ent1.get(): 
      if num in self.LETTERS: 
       sayı = self.LETTERS.find(num) 
       sayı = sayı - int(self.Ent2.get()) 
       if sayı >= 0: 
        sayı = sayı - len(self.LETTERS) 
       elif sayı <= 0: 
        sayı = sayı + len(self.LETTERS) 
       self.translation = self.translation + self.LETTERS[sayı] 
       self.RESULT.insert(0,self.translation) 
      else: 
       self.translation = self.translation + num 

if __name__ == "__main__": 
    root = Tk() 
    root.title("Sezar") 
    root.geometry("400x300+50+50") 
    Sezar(root).pack(side="top",fill = "both") 
    root.mainloop() 

그는이 있습니다 : 여기

Exception in Tkinter callback 
Traceback (most recent call last): 
File "C:\Users\PC\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1549, in __call__ 
return self.func(*args) 
File "C:/Users/PC/PycharmProjects/oyun/sezarUIing.py", line 33, in Encrypt 
self.translation = self.translation + self.LETTERS[sayı] 
IndexError: string index out of range 

코드입니다 Error

: 오류의 예를 들어 어떤이 오류의

예 예상된다 6,

의도 된 결과 : Expected

+1

당신이 SO에 대한 질문과 답변을 "작동하지 않는 시저 암호"다른 100 + 봤어 :

다음은 코드가 위의 문제를 해결 내 재입니까? 그들은 모두 똑같은 것으로 내려갑니다. – zaph

+0

@zaph 있습니다. 그러나 나는 같은 문제가있는 tkinter를 사용하는 사람을 찾을 수 없었다 –

+1

암호화/암호 해독이 작동 될 때까지 tkinter를 방정식에서 꺼내려고 했으므로 문제가 실제로 어디에 있는지 알 수 있습니까? –

답변

0

귀하의 오류 메시지가 당신이 당신의 Encrypt() 방법 모듈러 산술을 사용하지 않도록 (. 당신이 당신의 Decrypt() 방법 등 구현했다) 때문에

다른 문제는 새로운 텍스트를 추가하기 전에 self.RESULT을 삭제하지 포함했다 ; 새 번역 결과를 추가하기 전에 self.translation을 지우지 마십시오. 통제 할 수없는 대소 문자; 코드의 적절한 위치에 self.RESULT을 업데이트하지 마십시오 (숫자로 끝나는 텍스트 인 경우 번역에 반영되지 않습니다).

from tkinter import * 

class Sezar(Frame): 
    LETTERS = "abcdefghijklmnopqrstuvwxyz" 

    def __init__(self, pencere): 
     Frame.__init__(self, pencere) 
     self.pencere = pencere 

     Label(pencere, text="Enter your message: ", relief=GROOVE, width=20).place(x=20, y=30) 
     self.Ent1 = Entry(pencere, width=30) 
     self.Ent1.place(x=170, y=30) 

     Label(pencere, text="Enter key: ", relief=GROOVE, width=20).place(x=20, y=90) 
     self.Ent2 = Entry(pencere, width=30) 
     self.Ent2.place(x=170, y=90) 

     Button(pencere, text="Encrypt", relief=GROOVE, font="bold", command=self.Encrypt).place(x=50, y=150) 
     Button(pencere, text="Decrypt", relief=GROOVE, font="bold", command=self.Decrypt).place(x=110, y=150) 

     self.RESULT = Entry(pencere, width=30) 
     self.RESULT.place(x=170, y=200) 

    def Encrypt(self): 
     key = int(self.Ent2.get()) 
     length = len(self.LETTERS) 

     translation = '' 

     for character in self.Ent1.get(): 
      if character.lower() in self.LETTERS: 
       sayı = self.LETTERS.find(character.lower()) 
       sayı = (sayı + key) % length 
       translation += self.LETTERS[sayı] 
      else: 
       translation += character 

     self.RESULT.delete(0, END) 
     self.RESULT.insert(0, translation) 

    def Decrypt(self): 
     key = int(self.Ent2.get()) 
     length = len(self.LETTERS) 

     translation = '' 

     for character in self.Ent1.get(): 
      if character.lower() in self.LETTERS: 
       sayı = self.LETTERS.find(character.lower()) 
       sayı = (sayı - key) % length 
       translation += self.LETTERS[sayı] 
      else: 
       translation += character 

     self.RESULT.delete(0, END) 
     self.RESULT.insert(0, translation) 

if __name__ == "__main__": 
    root = Tk() 
    root.title("Sezar") 
    root.geometry("400x300+50+50") 
    Sezar(root).pack(side="top", fill="both") 
    root.mainloop()