【发布时间】:2021-12-11 17:56:19
【问题描述】:
我正在尝试编写的程序为列表中的每个元素添加一个按钮
for elem in add_new:
counter = add_new.index(elem)
name = add_new_names[counter]
self.button = QPushButton(name)
self.button.setObjectName('button_' + str(name))
self.button.setFixedWidth(200)
self.button.setFixedHeight(200)
self.stacked_layout.addWidget(self.button)
self.mygroupbox.setLayout(self.stacked_layout)
self.scroll.setWidget(self.mygroupbox)
这可行,但现在我想将这些按钮连接到事件/功能。如果我添加
self.button.clicked.connect(self.clickevent)
无论按下什么按钮,它都会执行该功能(显然)。有没有办法将自动添加的按钮连接到不同的功能/事件?
编辑: 提供更多代码
class AppDemo(QWidget):
def __init__(self):
super().__init__()
self.first_time = "True"
self.setAcceptDrops(True)
self.mainLayout = QVBoxLayout()
self.drop_label = ImageLabel()
self.mainLayout.addWidget(self.drop_label)
self.myform = QHBoxLayout()
self.mygroupbox = QGroupBox('selected pdf files')
self.scroll = QScrollArea()
self.scroll.setWidgetResizable(True)
self.scroll.setFixedHeight(300)
self.mainLayout.addWidget(self.scroll)
self.stacked_layout = QHBoxLayout()
self.setLayout(self.mainLayout)
def dragEnterEvent(self, event):
if self.find_pdf(event.mimeData()):
event.accept()
else:
event.ignore()
def dragMoveEvent(self, event):
if self.find_pdf(event.mimeData()):
event.accept()
else:
event.ignore()
def dropEvent(self, event):
add_new.clear()
add_new_names.clear()
urls = self.find_pdf(event.mimeData())
if urls:
for url in urls:
self.path = url.toLocalFile()
self.file_name = QFileInfo(self.path)
self.filename = self.file_name.baseName()
link_list.append(self.path)
title_list.append(self.filename)
list_of_links.append(self.path)
add_new.append(self.path)
add_new_names.append(self.filename)
event.accept()
self.button_creating()
else:
event.ignore()
def button_creating(self):
for elem in add_new:
counter = add_new.index(elem)
name = add_new_names[counter]
self.button = QPushButton(name)
self.button.setObjectName('button_' + str(name))
self.button.setFixedWidth(200)
self.button.setFixedHeight(200)
self.stacked_layout.addWidget(self.button)
self.mygroupbox.setLayout(self.stacked_layout)
self.scroll.setWidget(self.mygroupbox)
self.button.clicked.connect(self.clickevent)
def find_pdf(self, mimedata):
urls = list()
db = QMimeDatabase()
for url in mimedata.urls():
mimetype = db.mimeTypeForUrl(url)
if mimetype.name() == "application/pdf":
urls.append(url)
return urls
def clickevent(self):
print(self.button.text())
app = QApplication(sys.argv)
demo = AppDemo()
demo.showMaximized()
sys.exit(app.exec_())
【问题讨论】:
-
提供您的代码的完整最小工作示例,我可以提供帮助
-
我编辑了问题以添加更多代码
-
@monaghans_creed 每次 url 更改时创建一组新按钮是一种奇怪的方法。使用列表小部件会简单得多。
-
直到现在我才发现列表小部件。我明白你的意思,它更容易!谢谢!