【发布时间】:2021-07-16 14:10:59
【问题描述】:
我有一个清单:
self._filenames = [
"image1.png",
"image2.png",
"image3.png",
"image4.png",
"image5.png",
"image6.png",
]
还有一个新的所需文件名:
def createNewFilename(self):
self._newFilename = "New filename"
还有 PyQt5 按钮和一个标签:
如果我:
- 按下一步进入image2.png
- 按重命名按钮
那么:如何将列表项 image2.png 重命名为 New filename 并保留在列表中并更新到标签中?
- 当我一直按 Previous 或 Next 按钮时,我也应该能够重命名其他文件名,并通过单击浏览列表中更新的文件名。
这是整个事情的简短代码:
import sys
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QGridLayout, QLabel, QPushButton, QWidget
class Widget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self._current_index = 0
self._filenames = []
self._newFilename = ""
self._createNewFilename = ""
self.previous_button = QPushButton("Previous")
self.next_button = QPushButton("Next")
self.rename_button = QPushButton("Rename")
self.label = QLabel()
self.label2 = QLabel()
lay = QGridLayout(self)
lay.addWidget(self.previous_button, 0, 0)
lay.addWidget(self.next_button, 0, 1)
lay.addWidget(self.rename_button, 0, 2)
lay.addWidget(self.label2, 1, 0, 1, 3)
lay.addWidget(self.label, 2, 0, 1, 3)
self.previous_button.clicked.connect(self.handle_previous)
self.next_button.clicked.connect(self.handle_next)
self.rename_button.clicked.connect(self.handle_rename)
self._update_button_status(False, True)
self.load_files()
def load_files(self):
self._filenames = [
"image1.png",
"image2.png",
"image3.png",
"image4.png",
"image5.png",
"image6.png",
]
self.current_index = 0
def handle_next(self):
self.current_index += 1
def handle_previous(self):
self.current_index -= 1
@property
def current_index(self):
return self._current_index
@current_index.setter
def current_index(self, index):
if index <= 0:
self._update_button_status(False, True)
elif index >= (len(self._filenames) - 1):
self._update_button_status(True, False)
else:
self._update_button_status(True, True)
if 0 <= index < len(self._filenames):
self._current_index = index
filename = self._filenames[self._current_index]
pixmap = QPixmap(filename)
self.label.setPixmap(pixmap)
self.label2.setText(filename)
def _update_button_status(self, previous_enable, next_enable):
self.previous_button.setEnabled(previous_enable)
self.next_button.setEnabled(next_enable)
def createNewFilename(self):
self._newFilename = "New filename"
def handle_rename(self, index):
newFilename = self._newFilename
print(newFilename)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Widget()
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
【问题讨论】:
-
您的问题不清楚。什么时候应该重命名第二项?作为对什么的回应?
-
@musicamante 好的。现在怎么样,我编辑了一下。
-
您永远不会在“hadle_rename”功能中更改列表中的任何内容 - 那么为什么要进行任何更改?
-
您需要将
self._filenames[self._current_index]中的项目替换为您的新名称...直到您在列表中不做任何更改! -
为什么不在
handle_rename中添加self._filenames[self.current_index] = newFilename和self.label2.setText(newFilename)?
标签: python python-3.x pyqt5