[일상] tksheet flickering issue

옵션 전광판을 보여주기 위하여 tksheet를 사용하였는데요.

https://steemit.com/hive-101145/@tradingideas/3xlows

화면 update시 flickering이 발생합니다. 한 cell 당 처리를 하지 않고 전체를 지운 후 다시 그리는 형태인 듯 합니다.
아무래도 flickering이 눈에 거슬려서 tksheet 코드를 확인해보았습니다.

https://github.com/ragardner/tksheet

확인결과 redraw하는 코드에 문제가 있음을 발견하였습니다.
특정 cell에 대하여 값을 update하는 코드에서 다른 cell에 적용을 하고 있더군요.

코드로 간단하게 설명하자면,,, 아래 함수에서 각 cell에 대하여 값을 update합니다. loop를 (0,0) 부터 쭉 보면서 해당하는 widget을 받아서 udpate를 하는 방식인데요. 각 cell에 해당하는 widget을 받는 함수가 self.hidd_text.popitem() 인데, 여기에 들어가있는 widget의 순서가 반대입니다. 즉 (0,0) widget 부터 추가를 하다보니 마지막에는 제일 마지막 cell widget이 들어가있습니다. 그런데 사용하는 시점에서는 popitem을 해서 사용하다 보니 그릴려고 하는 cell 위치와 받은 widget이 mismatch가 발생했습니다.

def main_table_redraw_grid_and_text(self, redraw_header = False, redraw_row_index = False, redraw_table = True):
    :
    if redraw_table:
        for c in range(start_col, end_col - 1):
            for r in rows_:
                             :
                            if self.hidd_text:
                                t, sh = self.hidd_text.popitem()

(r,c) 위치 정보를 추가하여 widget을 list에 등록하도록 하였고, popitem을 사용하지 않고, (r,c) 값으로 해당하는 widget을 찾도록 변경하였습니다.
아직도 약간은 부자연스럽지만 참을만한 수준까지 올라왔습니다.

관련 부분은 github에 issue 등록하였습니다.
코드까지 고쳐서 pull request를 하면 좋겠지만 전체 코드를 이해하는 것이 쉽지 않아서 필요한 부분만 고쳐서 사용하고 있습니다.

현재 tksheet는 개발이 활발하지 않은 상태이므로 제가 issue한 문제점을 고쳐줄지는 모르겠습니다. 주기적으로 update 여부를 확인할 예정입니다.

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.034
BTC 64136.70
ETH 3128.20
USDT 1.00
SBD 3.94