【问题标题】:Which Label is clicked on PyQT在 PyQT 上点击了哪个标签
【发布时间】:2020-09-15 07:05:03
【问题描述】:

我有几个显示图像的标签。这些标签被添加到self.lay = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents) 。我从数据库中获取要使用 date_time 显示的图像并以这种方式显示图像。

if rows2 != None:
   for row in rows2:
      pixmap = QtGui.QPixmap("../"+row[1]).scaled(QtCore.QSize(200, 200)
                              , QtCore.Qt.KeepAspectRatio)
      if not pixmap.isNull():
         self.date_time.append(row[2])
         self.count += 1
         label = QtWidgets.QLabel()
         label.setPixmap(pixmap)
         label.mousePressEvent = self.showInfo
         self.lay.addWidget(label)
+------+-----------------------------+---------------------+
| p_id | image_path                  | date_time           |
+------+-----------------------------+---------------------+
|    0 | transfered_images/0/027.jpg | 2020-09-14 17:12:46 |
|    2 | transfered_images/2/227.jpg | 2020-09-15 09:44:38 |
+------+-----------------------------+---------------------+

点击时showInfo被调用

def showInfo(self,event):
   print(self.date_time[self.count-1])

但是这种方式只显示最后一张图片的 date_time
如何识别点击了哪个标签并相应地显示时间。

【问题讨论】:

    标签: python-3.x user-interface pyqt5


    【解决方案1】:

    我可能会重新实现 QLabel 类,并在其中创建一个可以保存 date_time 的变量。这样,您还可以保留 mousePressEvent 的本机功能。

    class MyLabel(QtWidgets.QLabel):
        def __init__(self, text='', parent=None, date_time=None):
            super().__init__(text, parent)
            self.date_time = date_time
        
        def mousePressEvent(self, ev):
            super().mousePressEvent(ev)
            print(self.date_time)
    

    并像使用它

    label = MyLabel(date_time=row[2])
    

    编辑:

    你的循环内部看起来像。

          if not pixmap.isNull():
             label = MyLabel(date_time=row[2])
             label.setPixmap(pixmap)
             self.lay.addWidget(label)
    

    【讨论】:

    • 能否请您提一下我应该写什么而不是 label.mousePressEvent = self.showInfo 。我把它写成label.mousePressEvent。它给出了预期的结果,但我认为这不是正确的方法
    • 查看编辑。 mousePressEvent 函数在标签被按下时原生运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多