2
2
3
3
import webbrowser
4
4
from os import getcwd
5
- from tkinter import ttk , StringVar , BooleanVar , Tk , N , W , E , S
5
+ from tkinter import BooleanVar , E , N , S , StringVar , Tk , W , ttk
6
+ from typing import Literal
6
7
7
8
import pandas as pd
8
9
9
10
10
11
class Leetcode :
11
-
12
- def __init__ (self , root ):
13
-
12
+ def __init__ (self , root ) -> None :
14
13
self .read_ratings ()
15
- self .df = self .data
14
+ self .df : pd . DataFrame = self .data
16
15
self .set_longest_title ()
17
16
18
17
root .title ("Leetcode problem opener" )
@@ -60,7 +59,10 @@ def __init__(self, root):
60
59
goto_entry .grid (column = 5 , row = 3 , sticky = (W , E ))
61
60
62
61
self .goto_combovar = StringVar ()
63
- self .goto_combovar_values = ("ID" , "Problem index" )
62
+ self .goto_combovar_values : tuple [Literal ["ID" ], Literal ["Problem index" ]] = (
63
+ "ID" ,
64
+ "Problem index" ,
65
+ )
64
66
goto_combo = ttk .Combobox (
65
67
mainframe , textvariable = self .goto_combovar , width = 15 , state = "readonly"
66
68
)
@@ -115,8 +117,8 @@ def __init__(self, root):
115
117
# root.bind("<Left>", self.show_prev_prob())
116
118
# root.bind("<Right>", self.show_next_prob())
117
119
118
- def set_by_index (self ):
119
- self .problem_index = max (self .problem_index , 0 )
120
+ def set_by_index (self ) -> None :
121
+ self .problem_index : int = max (self .problem_index , 0 )
120
122
self .problem_index = min (self .problem_index , len (self .df ) - 1 )
121
123
self .problem_id .set (self .df ["ID" ].iloc [self .problem_index ])
122
124
self .problem_name .set (self .df ["Title" ].iloc [self .problem_index ])
@@ -125,24 +127,24 @@ def set_by_index(self):
125
127
)
126
128
self .problem_diff .set (self .df ["Difficulty" ].iloc [self .problem_index ])
127
129
128
- def set_by_ID (self ):
130
+ def set_by_ID (self ) -> None :
129
131
number = int (self .goto_choice .get ()) # 0-indexed vs 1-indexed
130
132
131
- index = self .df .index [self .df ["ID" ] == number ]
133
+ index : pd . Index = self .df .index [self .df ["ID" ] == number ]
132
134
133
135
if not index .empty :
134
136
self .problem_index = index [0 ]
135
137
self .set_by_index ()
136
138
137
- def goto_problem (self ):
139
+ def goto_problem (self ) -> None :
138
140
try :
139
- number = int (self .goto_choice .get ()) - 1
141
+ number : int = int (self .goto_choice .get ()) - 1
140
142
except ValueError :
141
143
return
142
144
143
145
# todo - validation https://tkdocs.com/tutorial/widgets.html#entry
144
146
145
- label = self .goto_combovar .get ()
147
+ label : str = self .goto_combovar .get ()
146
148
147
149
if label == self .goto_combovar_values [0 ]: # self.goto_combovar_values == "ID"
148
150
self .set_by_ID ()
@@ -154,43 +156,42 @@ def goto_problem(self):
154
156
self .problem_index = number
155
157
self .set_by_index ()
156
158
157
- def set_longest_title (self ):
159
+ def set_longest_title (self ) -> None :
158
160
# get there by index - useful for extracting title itself
159
161
# idx = self.df.Title.str.len().idxmax()
160
162
# longest_title = self.df["Title"][idx]
161
163
# len(longest_title)
162
164
163
- lngst_title = self .df .Title .str .len ().max ()
165
+ lngst_title : int = self .df .Title .str .len ().max ()
164
166
# same as self.df["Title"].str.len().max()
165
167
166
- self .longest_title = lngst_title
168
+ self .longest_title : int = lngst_title
167
169
168
- def read_ratings (self ):
169
- path = getcwd () + "/data/" + "data.txt"
170
- self .data = pd .read_csv (path )
170
+ def read_ratings (self ) -> None :
171
+ path : str = getcwd () + "/data/" + "data.txt"
172
+ self .data : pd . DataFrame = pd .read_csv (path )
171
173
172
- def save_ratings (self ):
174
+ def save_ratings (self ) -> None :
173
175
# TODO document why this method is empty
174
176
pass
175
177
176
- def open_problem (self ):
178
+ def open_problem (self ) -> None :
177
179
problem_slug = self .df ["Title Slug" ].iloc [
178
180
self .problem_index
179
181
] # 0-indexed vs 1-indexed
180
182
urlpath = "https:/www.leetcode.com/problems/" + problem_slug
181
183
webbrowser .open (urlpath )
182
184
183
- def show_next_prob (self ):
185
+ def show_next_prob (self ) -> None :
184
186
self .problem_index += 1
185
187
self .set_by_index ()
186
188
187
- def show_prev_prob (self ):
189
+ def show_prev_prob (self ) -> None :
188
190
self .problem_index -= 1
189
191
self .set_by_index ()
190
192
191
- def set_show_status (self ):
192
-
193
- temp_df = self .data
193
+ def set_show_status (self ) -> None :
194
+ temp_df : pd .DataFrame = self .data
194
195
195
196
if not self .show_ac_var .get ():
196
197
temp_df = temp_df .loc [temp_df ["status" ] != "ac" ]
0 commit comments