In self.show_handles we have
if self.show_handles:
dx = (r - l) / 3
dy = (b - t) / 3
versus
def classify(self, x, y):
t, l, r, b = self.get_screencorners()
dx = (r - l) / 4
dy = (b - t) / 4
Please adjust to the same number, either both 3 or both 4
Otherwise the displayed handles are larger than the region where you can actually grab them.