1+ from PyQt5 .QtWidgets import QVBoxLayout , QTableWidget , QLabel , QComboBox , QTableWidgetItem , QHeaderView , QAbstractItemView
2+ from PyQt5 .QtCore import Qt
3+
4+ from network import get_api_data
5+ from consts import SAVE_KEY_MAP , CONST_NETWORK_APISTRMAP
6+
7+ class APITable (QTableWidget ):
8+ def __init__ (self ):
9+ super ().__init__ ()
10+ self .horizontalHeader ().setSectionResizeMode (QHeaderView .Stretch )
11+ self .horizontalHeader ().setHidden (True )
12+ self .verticalHeader ().setHidden (True )
13+ self .setEditTriggers (QAbstractItemView .NoEditTriggers )
14+ self .setSelectionMode (QAbstractItemView .SingleSelection )
15+ self .clear ()
16+
17+ def clear_table (self ):
18+ self .setRowCount (0 )
19+ self .setColumnCount (0 )
20+
21+ def set_data (self , data ):
22+ self .clear_table ()
23+ self .setRowCount (len (data ))
24+ self .setColumnCount (2 )
25+ for row , (key , value ) in enumerate (data .items ()):
26+ self .setItem (row , 0 , QTableWidgetItem (str (key )))
27+ self .setItem (row , 1 , QTableWidgetItem (str (value )))
28+
29+
30+ class APIInfoLayout (QVBoxLayout ):
31+ def __init__ (self , parent ):
32+ self .pnu = ""
33+ self .message_label = QLabel ("" , alignment = Qt .AlignCenter )
34+ self .message_label .setMinimumHeight (70 )
35+
36+ super ().__init__ ()
37+ self .parent = parent
38+ api_type_label = QLabel ("API 요청 설정:" )
39+ self .addWidget (api_type_label )
40+
41+ self .api_type_combo = QComboBox ()
42+ self .api_type_combo .addItems (CONST_NETWORK_APISTRMAP .keys ())
43+ self .api_type_combo .currentTextChanged .connect (
44+ self .on_combobox_changed )
45+ self .addWidget (self .api_type_combo )
46+
47+ self .api_table = APITable ()
48+ self .addWidget (self .api_table , stretch = 1 )
49+
50+ self .addWidget (self .message_label )
51+
52+ self .refresh ()
53+
54+ def set_pnu (self , pnu ):
55+ self .pnu = pnu
56+
57+ self .refresh ()
58+
59+ def clear (self ):
60+ self .pnu = ""
61+
62+ self .refresh ()
63+
64+ def refresh (self ):
65+ self .message_label .hide ()
66+ self .api_table .hide ()
67+
68+ # 1. check api
69+ apikey = self .parent .settings .value (SAVE_KEY_MAP .OPTION_APIKEY , "" )
70+ if not apikey :
71+ self .show_message ("API 키가 설정되지 않았습니다." )
72+ return
73+
74+ # 2. check selected
75+ if not self .pnu :
76+ self .show_message ("PNU가 포함된 행을 눌러주세요." )
77+ return
78+
79+ # 3. connect, and check success
80+ api_type = CONST_NETWORK_APISTRMAP .get (self .api_type_combo .currentText (), "" )
81+ if not api_type :
82+ return
83+
84+ data = get_api_data (apikey , self .pnu , api_type )
85+ if not data :
86+ self .show_message ("데이터를 가져오는데 실패했습니다.\n 해당하는 데이터가 없거나 apikey가 잘못되었을 수 있습니다." )
87+ return
88+
89+ self .api_table .set_data (data )
90+ self .api_table .show ()
91+
92+ def show_message (self , message ):
93+ self .message_label .setText (message )
94+ self .message_label .show ()
95+
96+ def on_combobox_changed (self , __text ):
97+ self .refresh ()
0 commit comments