
문제 요약:
main.py에서 AutoComplete.autocomplete()을 실행하면 PostgreSQL 연결은 성공 메시지가 뜨지만 실제 데이터 조회 (User.get_random_meme())에서 동작하지 않거나, GUI가 에러 (pyimage1 doesn't exist)를 발생시킴.pyimage1 doesn't exist 에러는 Tkinter 이미지 객체가 생성되었는데, mainloop 중간에 소멸되어 Tkinter가 그걸 참조할 수 없게 되는 대표적인 에러입니다.
PhotoImage나 Label 등에 설정된 이미지가 local variable로 만들어지고, 참조 없이 사라질 때 발생합니다.self.image = tk.PhotoImage(...)처럼 인스턴스 변수로 유지해야 합니다.PostgreSQL이 동작하지 않는 것처럼 보이는 이유
mainloop()가 잘못 종료되어 DB 동작까지 마무리되지 않을 수 있습니다.mainloop()가 조기 종료되면 이후 코드가 실행되지 않을 수 있습니다.tk.Tk()를 MainThreadExecutor의 root가 아닌 AutoComplete에서 다시 생성해서 충돌 가능성MainThreadExecutor는 self.root.mainloop()로 메인 이벤트 루프를 이미 돌리고 있습니다. 그런데 AutoComplete.display_meme_gui()에서 다시 tk.Tk()를 호출하는 건 중복 Tk root 생성으로 비정상 동작의 원인이 됩니다.
해결책: AutoComplete에서는 새 Tk()를 만들지 말고 Toplevel()으로 만들어야 합니다.
self.root = tk.Toplevel()
tk.Tk() → tk.Toplevel()으로 바꾸기 (중복 루트 방지)코드 구조상 동작은 맞지만, Tkinter의 이미지 관리, 중복 Tk() 루트 생성, 그리고 DB 연결의 암시적 종료 시점이 문제를 일으키고 있습니다.
위 3가지를 고치면 main.py에서도 정상적으로 autocomplete()과 DB 조회가 작동할 것입니다. 원하시면 MemeSelectionGUI 쪽 예시 코드까지 보여드릴게요.
역시 알기 위해서는 수단과 방법을 가리지 말아야한다. perplexity가 못한걸 chatgpt가 해냈다. 그리고 알기 위해서는 pyimage2 error로 검색했으면 알았을것이다.