2017-05-11 4 views
0

나는 python 3에서 tkinter를 사용하여 페인트 응용 프로그램을 만들었습니다. 응용 프로그램의 일부로 모양 (타원, 선, 텍스트 등)이 포함 된 위젯을 저장하려고합니다. 그리고 다시 그들을 다시로드하십시오. 나는 피클 모듈을 사용하고 저장에 아무런 문제가 없습니다,하지만 내가 그것을 다시로드하면 그것은 1에서 N까지의 정수를 포함하는 목록을 반환합니다. 아니 개체, 아니 셰이프. 객체를 재구성하려면 어떻게해야합니까? 여기서 내 두 함수 저장 하중 :덤프 파일에서 객체를 재구성하는 방법 - Python 3

def save_project(self): 
    output_file = filedialog.asksaveasfilename(filetypes=[('Text', '*.txt')], title='save project as') 
    try: 
     with open(output_file, 'wb') as output: 
     pickle.dump(self.stack, output) 
     output.close() 
    except FileNotFoundError: 
    self.log("Cancelled save or error in filename") 

def load_project(self): 
    load_file = filedialog.askopenfilename(filetypes=[('Text','*.txt')], title='Load Project') 
    if not load_file: return 
    pickled_file_object = open(load_file, "rb") 
    pickled_file_object.seek(0) 
    try: 
     self.all_patterns = pickle.load(pickled_file_object) 
    except EOFError: 
     self.log("Error: End of file") 
    pickled_file_object.close() 

    try: 
     # The problem is here: 
     print(self.all_patterns) 
     pprint.pprint(self.all_patterns) 
    except: 
     self.log("Error: Project can not be loaded") 

인쇄 출력된다 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 , 14, 15, 16, 17, 18, 20, 21, 22, 23]

저장된 텍스트 파일 인 동안 :

8003 5d71 0028

4b01 4b02 4b03 4b04 4b05 4b06 4b07 4b08 4b09 4b0a 4b0b 4b0c 4b0d 4b0e 4b0f 4b10 4b11 4b12 4b14 4b15 4b16 4b17 652e

+1

'self.stack'은 절인하기 전에 어떤 모습 이었습니까? – jasonharper

+0

모든 개체를 추가하는 목록 일뿐입니다. 실제로 그것은 실행 취소 (Undo) 기능을 위해 작동합니다. 그걸 기반으로 모양을 삭제할 수 있습니다. 그럼 다시 그들을 만드는 방법이어야합니다 –

답변

0

캔버스 내에 캔버스 객체를 저장하고로드 할 수있는 기능이 없습니다. 항목을 반복하고 좌표 및 기타 속성을 가져 와서 나중에 구문 분석 할 수있는 형식으로 저장하는 코드를 작성해야합니다. 그런 다음이 데이터를 읽고 캔버스 객체를 모두 재구성 할 수있는 코드를 작성해야합니다.

+0

답변 주셔서 감사합니다. 내 코드는 이미 400 줄로되어 있습니다. 그렇게하고 싶다면 내가 생각하기에 엄청난 엉망이 될 것입니다. 다른 해결책이 있습니까? 캔버스를 다른 것으로 바꾸면 어떨까요? –

+0

저장 한 데이터를 캔버스에 그려주는 메소드가있는 사용자 정의 캔바스 위젯을 만들 수 있습니다. 줄 수가 중요한 경우 다른 파일을 사용하고 가져옵니다. – DCPY