0

Всем добра.

Пишу интерфейс на PyQt5. Есть QFrame, в котором расположено 9 QLabel с QPixmap(QImage). При клике на изображение (QLabel), вызываю функцию.

На данный момент, проблема состоит в том, что реализовал я все очень криво, совсем не 'pythonic way' (хотя я, как самоучка, обычно не парюсь по поводу красоты, так как не знаю, что это(Я старый солдат, и не знаю слов любви, донна Роза …)).
В __init__() главного окна я пишу вот такую лабуду:

    self.ui.label_gv_0.mousePressEvent = self.set_img_0
    self.ui.label_gv_1.mousePressEvent = self.set_img_1
    self.ui.label_gv_2.mousePressEvent = self.set_img_2
    self.ui.label_gv_3.mousePressEvent = self.set_img_3
    self.ui.label_gv_4.mousePressEvent = self.set_img_4
    self.ui.label_gv_5.mousePressEvent = self.set_img_5
    self.ui.label_gv_6.mousePressEvent = self.set_img_6
    self.ui.label_gv_7.mousePressEvent = self.set_img_7
    self.ui.label_gv_main.mousePressEvent = self.set_img_m

Соответственно приходится создавать 9 одинаковых функций, что есть позор. Вот пример:

def set_img_0(self, event):
    global last_buffered_img
    last_buffered_img = nine['img_0']
    self.show_img(nine['img_0'])
    self.del_img()
    self.nine_in_one()

Как я понял, из QMouseEvent, вытащить информацию можно только о координатах, но не о конкретном объекте. Подскажите, как поступать в таких ситуациях? Как отловить, по какому конкретно изображению кликнули, или как передать в вызываемый метод параметр с именем изображения при таком отлове события? Как вообще в питоне группировать подобные вещи, чтобы получалось красиво, кратко и элегантно?


Добавить комментарий