gpt4 book ai didi

python - 如何在 PyQt5 中按下时切换按钮文本

转载 作者:行者123 更新时间:2023-12-01 08:05:20 25 4
gpt4 key购买 nike

我正在尝试使用 PyQt5 按下时更改按钮文本。我有一个已填充的表格,每行都有一个按钮。最初该按钮应显示“播放”,按下后应显示“暂停”。

我使用以下方法填充表格并处理按钮按下操作:

def populate_table(self, total, my_songs):
self.create_rows(total)
btn_press = 0

for row in range(total):
for col in range(4):
self.tableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(str(my_songs[row].get_title())
.strip('"\'')))
self.tableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(str(my_songs[row].get_artist())
.strip('"\'')))
self.tableWidget.setItem(row, 2, QtWidgets.QTableWidgetItem(str(my_songs[row].get_album())
.strip('"\'')))
self.tableWidget.setItem(row, 3, QtWidgets.QTableWidgetItem(str(my_songs[row].get_length())
.strip('"\'')))
# self.tableWidget.setItem(row, 4, QtWidgets.QPushButton('Play'))

self.btn_play = QPushButton("Play", self)
self.btn_play.clicked.connect(lambda: self.handle_play_button(self.btn_press))
self.tableWidget.setCellWidget(row, 4, self.btn_play)

def handle_play_button(self, btn_press):
button = QtWidgets.qApp.focusWidget()
# or button = self.sender()
index = self.tableWidget.indexAt(button.pos())
if index.isValid():
self.btn_press += 1
print(index.row(), index.column(), btn_press)
self.btn_play.setText("Pause") #This does not work

这让我知道按下了哪个按钮,以便我可以继续播放歌曲。以下示例给出 here我尝试使用 setText,但我没有看到任何可见的文本更改。关于如何做到这一点有什么建议吗?谢谢!

编辑:

代表我犯了错误。无论按下哪个按钮,最后创建的按钮都会更改为“暂停”。我可以使用 index.row() 以某种方式索引按下的按钮进行切换吗?

enter image description here

最佳答案

永远不要在循环中创建属性,在您的情况下self.btn_play您将指向哪个按钮?然后到最后,因此它对我们不起作用。您可以使用 focusWidget() 或使用 sender 获取该按钮(如果该类是小部件)。

def populate_table(self, my_songs):
self.tableWidget.clear()
self.tableWidget.setColumnCount(5)
for row, data in enumerate(my_songs):
self.tableWidget.insertRow(self.tableWidget.rowCount())
self.tableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(str(my_songs[row].get_title())
.strip('"\'')))
self.tableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(str(my_songs[row].get_artist())
.strip('"\'')))
self.tableWidget.setItem(row, 2, QtWidgets.QTableWidgetItem(str(my_songs[row].get_album())
.strip('"\'')))
self.tableWidget.setItem(row, 3, QtWidgets.QTableWidgetItem(str(my_songs[row].get_length())
.strip('"\'')))
btn_play = QtWidgets.QPushButton(text="Play", clicked=self.handle_play_button)
self.tableWidget.setCellWidget(row, 4, btn_play)

@QtCore.pyqtSlot()
def handle_play_button(self):
btn = QtWidgets.qApp.focusWidget()
# btn = self.sender()
if btn is not None:
text = btn.text()
btn.setText("Pause" if text == "Play" else "Play")

关于python - 如何在 PyQt5 中按下时切换按钮文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55566861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com