오늘 한 일 :

OO님 업무 이어 받아 UI 소스 코드 작성함. 파일을 각자 다르게 구분하다보니, 이미지 경로를 제대로 못불러오는 현상 발생

qrc(리소스)를 사용하여 인코딩 후 경로 설정하여 인코딩함

''' pyuic --import-from=Code.front.ui -x {ui}.ui -o ui_class_{ui}.py '''

명령어를 사용하면 된다.

 

그려면 compile 된 파일에서 저렇게 마지막 부분에 import 가 따라 붙어서 이미지를 참조할 수 있게된다.

1. pyuic

# ui_compiler.py
import os
import sys

if __name__ == '__main__':
    os.system(f"pyrcc5 ../src_img/my_qrc.qrc -o my_qrc_rc.py")

    uis = ['page_friend_list_ui', 'page_join_ui', 'page_login_ui', 'page_talk_room_list_ui', 'page_talk_room_ui',
           'widget_talk_room_invite_user_list', 'widget_search_talk_room_member_list',
           'widget_profile_item_ui', 'widget_chat_room_item_ui', 'profile_page_ui', 'widget_invite_user_item','widget_talk_room_invite_user_list_in_chat_room']
    for ui in uis:
        # os.system(f'python  -m PyQt5.uic.pyuic --from-imports -x {ui}.ui -o ui_class_{ui}.py')
        os.system(f'python  -m PyQt5.uic.pyuic --import-from=Code.front.ui -x {ui}.ui -o ui_class_{ui}.py')

 

pyrcc 모듈을 디자이너 사용할 때 초창기 때 쓰고 쓸 일이 없을 줄 알았는데, 이 방법만 안다면 경로 문제가 의외로 수월하게 풀릴 것 같다

 

 


2. json

class KKOEncoder(JSONEncoder):

    def __init__(self):
        super().__init__()


    def encode(self, o) -> str:
        if isinstance(o, list) and isinstance(o[0], User):
            temp_list = list()
            for obj in o:
                str_obj = obj.toJSON()
                temp_list.append(str_obj)
            return json.dumps(temp_list)

        elif isinstance(o, list) and isinstance(o[0], Message):
            temp_list = list()
            for obj in o:
                str_obj = obj.toJSON()
                temp_list.append(str_obj)
            return json.dumps(temp_list)

        return json.dumps(o, default=lambda o: o.__dict__)


    def default(self, o):
        return o.__dict__


class KKODecoder(JSONDecoder):
    def __init__(self):
        super().__init__()

    def decode_any(self, o, **kwargs):
        o: str
        if o.startswith("["):  # list type
            list_type_obj = json.loads(o)
            temp_list = list()
            for obj in list_type_obj:
                one_obj = self.decode_obj(obj)
                temp_list.append(one_obj)
            return temp_list

        else:
            return self.decode_obj(o, **kwargs)

    def decode_obj(self, o, **kwargs):

        dict_obj = super().decode(o, **kwargs)
        if 'user_talk_room_id' in dict_obj.keys():
            return UserTalkRoom(dict_obj['user_talk_room_id'], dict_obj['user_id'], dict_obj['talk_room_id'])
        elif 'user_id' in dict_obj.keys():
            return User(dict_obj['user_id'], dict_obj['username'], dict_obj['password'], dict_obj['nickname'])
        elif 'message_id' in dict_obj.keys():
            temp_user = User(*dict_obj['user_obj'].values())
            return Message(dict_obj['message_id'], dict_obj['sender_user_id'], dict_obj['talk_room_id'],
                           dict_obj['contents'], dict_obj['send_time_stamp'], dict_obj['long_contents_id'], temp_user)
        elif 'talk_room_id' in dict_obj.keys():
            return TalkRoom(dict_obj['talk_room_id'], dict_obj['talk_room_name'], dict_obj['open_time_stamp'])
        elif 'contents_id' in dict_obj.keys():
            return LongContents(dict_obj['contents_id'], dict_obj['contents_type'], dict_obj['long_text'],
                                dict_obj['image'])

 

list type의 json을 분리해준다.

3중 이상의 리스트는 구현하지 않도록 설계하여, 해당 로직으로 끝나는 걸 다행이라 생각한다.

 

 


 

내일은 정말 마무리단계이다. 오늘 꽤 많이 진행했는데, 잘 마무리 할 수 있으면 좋겠다.

 

감사합니다.

 

+ Recent posts