如何解决获取所有用户输入/行编辑的价值
我正在寻找一种方法来获取应用的所有用户输入/行编辑的值或文本
我正在创建一个可以同时创建多个文件夹的应用。有多个用户输入要写入文件夹的名称,这是我通过多次调用同一个函数创建的。使用这个“self.le2.text()”只会得到创建的第一个用户输入的值。
到目前为止,这是我的代码。本质上,我希望“创建文件夹”按钮从“new_folder”函数创建的所有用户输入中创建所有文件夹。现在它只得到第一个创建的值。
import sys
import os
from PySide6 import QtWidgets,QtCore,QtGui
from PySide6.QtWidgets import QApplication
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
#set central widget and layout
self.setwindowTitle("Amazing Folder Generator")
self.generalLayout = QtWidgets.QVBoxLayout()
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
self.centralWidget.setLayout(self.generalLayout)
self.le1 = QtWidgets.QLineEdit()
self.file_path()
self.button1 = QtWidgets.QPushButton("New Folder")
self.generalLayout.addWidget(self.button1)
self.button1.pressed.connect(self.new_folder)
self.button2 = QtWidgets.QPushButton("Create Folders")
self.generalLayout.addWidget(self.button2)
self.button2.pressed.connect(self.create_files)
self.new_folder()
self.new_folder()
self.new_folder()
def file_path(self):
self.le1 = QtWidgets.QLineEdit()
self.le1.setFixedHeight(20)
self.le1.setAlignment(QtCore.Qt.AlignRight)
self.path_layout = QtWidgets.qformlayout()
self.path_layout.addRow("Folder Path: ",self.le1)
self.generalLayout.addLayout(self.path_layout)
def new_folder(self):
self.le2 = QtWidgets.QLineEdit()
self.le2.setFixedHeight(20)
self.le2.setAlignment(QtCore.Qt.AlignRight)
self.path_layout = QtWidgets.qformlayout()
filename = "File: "
self.path_layout.addRow(filename,self.le2)
self.generalLayout.addLayout(self.path_layout)
def create_files(self):
path = self.le1.text() + "\\"
filename = self.le2.text()
newpath = path + filename
if not os.path.exists(newpath):
os.makedirs(newpath)
else:
print("folder already exists")
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
解决方法
简单的解决方案是将 QLineEdits 存储在列表中,然后迭代以获取文本。在这种情况下,我重写了您的代码以使其更具可读性。
import sys
import os
import os.path
from PySide6 import QtWidgets,QtCore,QtGui
class MainWindow(QtWidgets.QMainWindow):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent)
self.setWindowTitle("Amazing Folder Generator")
self.folder_le = QtWidgets.QLineEdit(alignment=QtCore.Qt.AlignRight)
self.folder_le.setFixedHeight(20)
self.add_row_button = QtWidgets.QPushButton("New Folder")
self.create_button = QtWidgets.QPushButton("Create Folders")
self.files_layout = QtWidgets.QFormLayout()
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
self.form_layout = QtWidgets.QFormLayout(central_widget)
self.form_layout.addRow("Folder Path:",self.folder_le)
self.form_layout.addRow(self.add_row_button)
self.form_layout.addRow(self.create_button)
self.form_layout.addRow(self.files_layout)
self._files_le = []
self.add_row_button.clicked.connect(self.add_row)
self.create_button.clicked.connect(self.create_files)
for _ in range(3):
self.add_row()
@property
def folder(self):
return self.folder_le.text()
@property
def filenames(self):
return [le.text() for le in self._files_le]
def add_row(self):
le = QtWidgets.QLineEdit(alignment=QtCore.Qt.AlignRight)
le.setFixedHeight(20)
self.files_layout.addRow("File:",le)
self._files_le.append(le)
def create_files(self):
for filename in self.filenames:
newpath = os.path.join(self.folder,filename)
if not os.path.exists(newpath):
os.makedirs(newpath)
else:
print("folder already exists")
def main():
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。