鱼C论坛

 找回密码
 立即注册
查看: 4026|回复: 2

PyQT5 动态添加的按钮和标签事件绑定问题

[复制链接]
发表于 2020-9-25 10:55:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如下代码所示,动态添加的label绑定点击和鼠标悬停事件都不执行,请问各位大佬该怎么写
动态添加的button添加点击事件怎么把自己的属性作为参数传进去,或者其他内容参数。

tkinter 做了一个版本  可以这么写
self.content_btn = Button(
                self.frame1, text=value[1], width=40, command=lambda arg=value[1]: self.text_click(arg))
但是qt实在不会,求大佬指导一下

  1. # 初始化行元素
  2. def init_rows(self):
  3.     index = 0
  4.     for i, value in enumerate(totalArray[pageIndex].items()):
  5.         tital_labels.append(QtWidgets.QLabel(self.gridLayoutWidget))
  6.         tital_labels[i].setObjectName("tital_label")
  7.         tital_labels[i].setText(value[0] + ':')
  8.         tital_labels[i].setStyleSheet("background-color:gold")
  9.         tital_labels[i].setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)

  10.         tital_labels[i].linkHovered.connect(self.linkHovered) # 不执行
  11.         tital_labels[i].linkActivated.connect(self.linkClicked) # 不执行

  12.         self.gridLayout.addWidget(tital_labels[i], int(i / 2), i % 2 * 9, 1, 1)
  13.         # 行button
  14.         val_btns.append(QtWidgets.QPushButton(self.gridLayoutWidget))
  15.         val_btns[i].setObjectName("valButton")
  16.         val_btns[i].setText(value[1])
  17.         val_btns[i].setToolTip(value[1])
  18.         val_btns[i].setStyleSheet("background-color:LavenderBlush")
  19.         val_btns[i].clicked.connect(lambda: self.show_all_row(value[1]))
  20.         self.gridLayout.addWidget(val_btns[i], int(i/2), int(i % 2*9 + 1), 1, 1)
  21.         index = i

  22.     right_btn = QtWidgets.QPushButton(self.gridLayoutWidget)
  23.     right_btn.setText("Next")
  24.     self.gridLayout.addWidget(right_btn, int(len(titalArr)/2 + 1), 4, 1, 1)

  25.     left_btn = QtWidgets.QPushButton(self.gridLayoutWidget)
  26.     left_btn.setText("Previous")
  27.     self.gridLayout.addWidget(left_btn, int(len(titalArr)/2 + 1), 2, 1, 1)

  28. def show_all_row(self,value):
  29.     print('当鼠标滑过label2标签时,触发事件' + value)
  30. def label_hover(self):
  31.     print('当鼠标滑过label2标签时,触发事件')
  32. def linkHovered(self):
  33.     print('当鼠标滑过label2标签时,触发事件')
  34. def linkClicked(self):
  35.     print('当鼠标单击label4标签时,触发事件')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-25 16:46:12 | 显示全部楼层
  1. # -*- coding: utf-8 -*-
  2. from PyQt5.QtWidgets import QApplication, QWidget
  3. from PyQt5 import QtCore, QtWidgets, QtGui

  4. '''
  5. Pyqt 动态的添加控件
  6. '''


  7. class DynAddObject(QWidget):
  8.     def __init__(self, parent=None):
  9.         super(DynAddObject, self).__init__(parent)
  10.         addButton = QtWidgets.QPushButton(u"添加控件")
  11.         self.layout = QtWidgets.QGridLayout()
  12.         self.layout.addWidget(addButton, 1, 0)
  13.         self.setLayout(self.layout)
  14.         addButton.clicked.connect(self.add)

  15.     def add(self):
  16.         self.button = {}
  17.         print(type(self.button))
  18.         for i in range(1, 8):
  19.             self.button[i] = QtWidgets.QPushButton(str(i))
  20.             self.button[i].clicked.connect(lambda: self.show_all_row(self.sender().text()))
  21.             self.layout.addWidget(self.button[i])

  22.     @staticmethod
  23.     def show_all_row(txt):
  24.         print('here' + str(txt))


  25. if __name__ == "__main__":
  26.     import sys

  27.     app = QApplication(sys.argv)
  28.     form = DynAddObject()
  29.     form.show()
  30.     app.exec_()
复制代码


你没给完整代码 我就参考https://blog.csdn.net/iblctw/article/details/106421326的demo,改了一下 看是不是你需要的效果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 16:55:01 | 显示全部楼层
  1. # -*- coding: utf-8 -*-
  2. from PyQt5.QtWidgets import QApplication, QWidget
  3. from PyQt5 import QtCore, QtWidgets, QtGui

  4. '''
  5. Pyqt 动态的添加控件
  6. '''


  7. class DynAddObject(QWidget):
  8.     def __init__(self, parent=None):
  9.         super(DynAddObject, self).__init__(parent)
  10.         addButton = QtWidgets.QPushButton(u"添加控件")
  11.         self.layout = QtWidgets.QGridLayout()
  12.         self.layout.addWidget(addButton, 1, 0)
  13.         self.setLayout(self.layout)
  14.         addButton.clicked.connect(self.add)

  15.     def add(self):
  16.         self.button = {}
  17.         print(type(self.button))
  18.         for i in range(1, 8):
  19.             self.button[i] = QtWidgets.QPushButton(str(i))
  20.             self.button[i].clicked.connect(lambda: self.show_all_row(self.sender().text()))
  21.             self.layout.addWidget(self.button[i])

  22.     @staticmethod
  23.     def show_all_row(txt):
  24.         print('here' + str(txt))


  25. if __name__ == "__main__":
  26.     import sys

  27.     app = QApplication(sys.argv)
  28.     form = DynAddObject()
  29.     form.show()
  30.     app.exec_()
复制代码


我之前回答带链接在审核 ,给你一段参考吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 16:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表