Передача PyQt5.QtCore.QMetaObject.Connection object в строку
Через интерфейс программы производится выбор двух файлов и директории для вывода нового третьего файла, который будет создан.
При попытке передать путь к файлу в функцию, которая выполняет открытие файла вместо пути файла передается connection объект.
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from ui import Ui_Main
def get_file_donor():
way = ''
file_donor = QtWidgets.QFileDialog().getOpenFileName()[0]
ui.lineEdit.setText(str(file_donor))
way += str(file_donor)
return way
def get_file_getter():
way = ''
file_getter = QtWidgets.QFileDialog().getOpenFileName()[0]
ui.lineEdit_2.setText(str(file_getter))
way += str(file_getter)
return way
def get_output_directory():
way = ''
directory = QtWidgets.QFileDialog().getExistingDirectory()
ui.lineEdit_3.setText(str(directory))
way += str(directory)
return way
def copypaste(file_donor, file_getter, directory):
string = ' 0\n'
file_1 = open(file_donor, encoding='utf-8')
data_1 = file_1.readlines()
data_1 = data_1[data_1.index("POLYLINE\n"):]
file_2 = open(file_getter, encoding='utf-8')
data_2 = file_2.readlines()
file_3 = open(directory + '/file_output.dxf', 'a', encoding='utf-8')
for el in data_2[:data_2.index("EOF\n")]:
file_3.write(el)
for el in data_1[:data_1.index("ENDSEC\n")]:
file_3.write(el)
file_3.write('ENDSEC\n')
file_3.write(string)
file_3.write("EOF\n")
file_1.close()
file_2.close()
file_3.close()
app = QtWidgets.QApplication(sys.argv)
Main = QtWidgets.QWidget()
ui = Ui_Main()
ui.setupUi(Main)
file_donor = str(ui.pushButton.clicked.connect(get_file_donor))
file_getter = str(ui.pushButton_2.clicked.connect(get_file_getter))
directory = str(ui.pushButton_4.clicked.connect(get_output_directory))
ui.pushButton_3.clicked.connect(copypaste(file_donor, file_getter, directory))
Main.show()
sys.exit(app.exec_())
В итоге в консоли следующее:
FileNotFoundError: [Errno 2] No such file or directory: '<PyQt5.QtCore.QMetaObject.Connection object at 0x7f5429079890>'
Модуль ui.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Main(object):
def setupUi(self, Main):
Main.setObjectName("Main")
Main.setWindowModality(QtCore.Qt.ApplicationModal)
Main.resize(400, 282)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("copy.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Main.setWindowIcon(icon)
Main.setAccessibleName("")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(Main)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(Main)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.verticalLayout_3.addLayout(self.verticalLayout)
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.label_3 = QtWidgets.QLabel(Main)
self.label_3.setObjectName("label_3")
self.verticalLayout_6.addWidget(self.label_3)
self.verticalLayout_3.addLayout(self.verticalLayout_6)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.pushButton = QtWidgets.QPushButton(Main)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.lineEdit = QtWidgets.QLineEdit(Main)
self.lineEdit.setClearButtonEnabled(False)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
self.verticalLayout_3.addLayout(self.horizontalLayout)
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.label_5 = QtWidgets.QLabel(Main)
self.label_5.setObjectName("label_5")
self.verticalLayout_4.addWidget(self.label_5)
self.verticalLayout_3.addLayout(self.verticalLayout_4)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.pushButton_2 = QtWidgets.QPushButton(Main)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout_2.addWidget(self.pushButton_2)
self.lineEdit_2 = QtWidgets.QLineEdit(Main)
self.lineEdit_2.setClearButtonEnabled(False)
self.lineEdit_2.setObjectName("lineEdit_2")
self.horizontalLayout_2.addWidget(self.lineEdit_2)
self.verticalLayout_3.addLayout(self.horizontalLayout_2)
self.verticalLayout_5 = QtWidgets.QVBoxLayout()
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.label_4 = QtWidgets.QLabel(Main)
self.label_4.setObjectName("label_4")
self.verticalLayout_5.addWidget(self.label_4)
self.verticalLayout_3.addLayout(self.verticalLayout_5)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.pushButton_4 = QtWidgets.QPushButton(Main)
self.pushButton_4.setObjectName("pushButton_4")
self.horizontalLayout_3.addWidget(self.pushButton_4)
self.lineEdit_3 = QtWidgets.QLineEdit(Main)
self.lineEdit_3.setClearButtonEnabled(False)
self.lineEdit_3.setObjectName("lineEdit_3")
self.horizontalLayout_3.addWidget(self.lineEdit_3)
self.verticalLayout_3.addLayout(self.horizontalLayout_3)
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.pushButton_3 = QtWidgets.QPushButton(Main)
self.pushButton_3.setObjectName("pushButton_3")
self.verticalLayout_2.addWidget(self.pushButton_3)
self.verticalLayout_3.addLayout(self.verticalLayout_2)
self.retranslateUi(Main)
QtCore.QMetaObject.connectSlotsByName(Main)
def retranslateUi(self, Main):
_translate = QtCore.QCoreApplication.translate
Main.setWindowTitle(_translate("Main", "DXF-CP"))
self.label.setText(_translate("Main", "Generating a dxf file by adding data\n"
" to the destination file from the donor file"))
self.label_3.setText(_translate("Main", "Donor file:"))
self.pushButton.setText(_translate("Main", "Open"))
self.label_5.setText(_translate("Main", "Destination file:"))
self.pushButton_2.setText(_translate("Main", "Open"))
self.label_4.setText(_translate("Main", "Output directory:"))
self.pushButton_4.setText(_translate("Main", "Open"))
self.pushButton_3.setText(_translate("Main", "Generate"))
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Вы не предоставили примеры файлов, которые вы читаете,
поэтому я не проверил работу приложения.
Вы не правильно понимаете работу сигналов и слотов, почитайте Signals & Slots
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#from ui import Ui_Main
class Ui_Main(object):
def setupUi(self, Main):
Main.setObjectName("Main")
Main.setWindowModality(QtCore.Qt.ApplicationModal)
Main.resize(400, 282)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("copy.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Main.setWindowIcon(icon)
Main.setAccessibleName("")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(Main)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(Main)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.verticalLayout_3.addLayout(self.verticalLayout)
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.label_3 = QtWidgets.QLabel(Main)
self.label_3.setObjectName("label_3")
self.verticalLayout_6.addWidget(self.label_3)
self.verticalLayout_3.addLayout(self.verticalLayout_6)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.pushButton = QtWidgets.QPushButton(Main)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.lineEdit = QtWidgets.QLineEdit(Main)
self.lineEdit.setClearButtonEnabled(False)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
self.verticalLayout_3.addLayout(self.horizontalLayout)
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.label_5 = QtWidgets.QLabel(Main)
self.label_5.setObjectName("label_5")
self.verticalLayout_4.addWidget(self.label_5)
self.verticalLayout_3.addLayout(self.verticalLayout_4)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.pushButton_2 = QtWidgets.QPushButton(Main)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout_2.addWidget(self.pushButton_2)
self.lineEdit_2 = QtWidgets.QLineEdit(Main)
self.lineEdit_2.setClearButtonEnabled(False)
self.lineEdit_2.setObjectName("lineEdit_2")
self.horizontalLayout_2.addWidget(self.lineEdit_2)
self.verticalLayout_3.addLayout(self.horizontalLayout_2)
self.verticalLayout_5 = QtWidgets.QVBoxLayout()
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.label_4 = QtWidgets.QLabel(Main)
self.label_4.setObjectName("label_4")
self.verticalLayout_5.addWidget(self.label_4)
self.verticalLayout_3.addLayout(self.verticalLayout_5)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.pushButton_4 = QtWidgets.QPushButton(Main)
self.pushButton_4.setObjectName("pushButton_4")
self.horizontalLayout_3.addWidget(self.pushButton_4)
self.lineEdit_3 = QtWidgets.QLineEdit(Main)
self.lineEdit_3.setClearButtonEnabled(False)
self.lineEdit_3.setObjectName("lineEdit_3")
self.horizontalLayout_3.addWidget(self.lineEdit_3)
self.verticalLayout_3.addLayout(self.horizontalLayout_3)
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.pushButton_3 = QtWidgets.QPushButton(Main)
self.pushButton_3.setObjectName("pushButton_3")
self.verticalLayout_2.addWidget(self.pushButton_3)
self.verticalLayout_3.addLayout(self.verticalLayout_2)
self.retranslateUi(Main)
QtCore.QMetaObject.connectSlotsByName(Main)
def retranslateUi(self, Main):
_translate = QtCore.QCoreApplication.translate
Main.setWindowTitle(_translate("Main", "DXF-CP"))
self.label.setText(_translate("Main", "Generating a dxf file by adding data\n"
" to the destination file from the donor file"))
self.label_3.setText(_translate("Main", "Donor file:"))
self.pushButton.setText(_translate("Main", "Open"))
self.label_5.setText(_translate("Main", "Destination file:"))
self.pushButton_2.setText(_translate("Main", "Open"))
self.label_4.setText(_translate("Main", "Output directory:"))
self.pushButton_4.setText(_translate("Main", "Open"))
self.pushButton_3.setText(_translate("Main", "Generate"))
class MainWindow(QtWidgets.QWidget, Ui_Main):
def __init__(self):
super().__init__()
self.setupUi(self)
self.file_donor = None
self.file_getter = None
self.directory = None
self.pushButton.clicked.connect(self.get_file_donor)
self.pushButton_2.clicked.connect(self.get_file_getter)
self.pushButton_4.clicked.connect(self.get_output_directory)
self.pushButton_3.clicked.connect(self.copypaste)
def get_file_donor(self):
self.file_donor = QtWidgets.QFileDialog().getOpenFileName()[0]
self.lineEdit.setText(self.file_donor)
def get_file_getter(self):
self.file_getter = QtWidgets.QFileDialog().getOpenFileName()[0]
self.lineEdit_2.setText(self.file_getter)
def get_output_directory(self):
self.directory = QtWidgets.QFileDialog().getExistingDirectory()
self.lineEdit_3.setText(self.directory)
def copypaste(self):
if not self.file_donor or not self.file_getter or not self.directory:
return
string = ' 0\n'
file_1 = open(self.file_donor, encoding='utf-8')
data_1 = file_1.readlines()
data_1 = data_1[data_1.index("POLYLINE\n"):]
file_2 = open(self.file_getter, encoding='utf-8')
data_2 = file_2.readlines()
file_3 = open(self.directory + '/file_output.dxf', 'a', encoding='utf-8')
for el in data_2[:data_2.index("EOF\n")]:
file_3.write(el)
for el in data_1[:data_1.index("ENDSEC\n")]:
file_3.write(el)
file_3.write('ENDSEC\n')
file_3.write(string)
file_3.write("EOF\n")
file_1.close()
file_2.close()
file_3.close()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
