오늘은 GUI를 간단하게 qtdesigner를 사용해서 구성하고, 위젯들과 함수를 연결하는 일을 했다.
일단은 가장 문제가 된 점은 QTableWidget에 전적들을 띄워야 하는데 이 때 item을 추가하는 부분에서 고민을 하고있다.
게임의 주요 내용인 승패, 사용한 챔피언, 게임모드, 킬, 데스, 어시스트, KDA, 게임 시간을 보여줘야 하는데 이것들을 그냥 함수를 안쓰고 하려니 저번에 만든 visualize_match 함수가 하는 역할과 거의 같아서 한 번에 모든 게임의 상세 정보를 가져오는 것이 과연 효율적인가에 대해 고민을 했었다.
그래도 한번 visualize_match 함수를 손봐서 match_list에 있는 모든 게임의 상세 정보를 관리하기 편하게 데이터 전처리를 하는 함수로 개선을 하고 이렇게 만들어진 데이터를 이용해서 tablewidget에 item으로 추가하는 것이 나을 것 같다.
Main_Window = uic.loadUiType('Main_window.ui')[0]
class WindowClass(QMainWindow, Main_Window):
def __init__(self):
super().__init__()
self.l = rf.League_of_Legend()
self.setupUi(self)
self.SearchButton.clicked.connect(self.display_match())
self.MasteryButton.clicked.connect(self.display_mastery())
self.show()
def display_match(self):
# 이전에 가지고 온 소환사 정보가 있으면 다시 가져오지 않고 기존 소환사 정보 사용
if self.l.valid_name == 1:
pass
else:
self.l.get_summoner_information(self.SummonerName.text())
if self.l.valid_name == 0:
self.ResultTable.setItem(0, 0, QTableWidgetItem("해당하는 소환사가 없습니다."))
self.SummonerName.clear()
else:
column_headers = ['승패', '챔피언', '게임모드','킬', '데스', '어시', 'KDA', '게임시간']
self.ResultTable.setHorizontalHeaderLabels(column_headers)
# 어차피 이렇게 가져올거면 그냥 애초에 각 게임의 상세 내역을 visualize_match 함수로 만들어 버리는 것은 어떤가?
# 그러면 안보는 게임의 상세 내역도 처리해서 비효율적이지 않을까?
for i in self.l.match_info_dict:
row = 0
match_result = "승리" if self.l.match_info_dict[i]['teams'][0]['win'] == 1 else "패배"
for j in self.l.match_info_dict[i]['info']['participants']:
if j['summonerName'] == self.l.summoner_info['name']:
used_champion = j['championName']
player_kills = j['kills']
player_deaths = j['deaths']
player_assists = j['assists']
player_kda = round((player_kills + player_assists) / player_deaths, 1)
game_mode = self.l.match_info_dict[i]['info']['gameMode']
game_duration = str(self.l.match_info_dict[i]['info']['gameDuration'] // 60) + '분 ' + str(self.l.match_info_dict[i]['info']['gameDuration'] % 60) + '초'
for col in len(column_headers):
pass