Witam,
używam PyCharm i Python 3.8 (venv).
Mam problem z przeniesieniem stringu (path) z funkcji openFile do funkcji convertFile.
Przy aktualny kodzie, jak wywołuje funkcje convertFile, wyrzuca następujący błąd:
[code=python] self.Button_convert.clicked.connect(lambda: self.convertFile(path=path))
NameError: name 'path' is not defined[/code]
Może mi ktoś podpowiedzieć co robię źle ?
A oto mój kod:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui.ui'
#
# Created by: PyQt5 UI code generator 5.14.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog, QApplication
from lxml import etree
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.source_file = QtWidgets.QLabel(self.centralwidget)
self.source_file.setGeometry(QtCore.QRect(10, 20, 81, 30))
self.source_file.setObjectName("source_file")
self.new_file = QtWidgets.QLabel(self.centralwidget)
self.new_file.setGeometry(QtCore.QRect(10, 50, 81, 30))
self.new_file.setObjectName("new_file")
self.splitter = QtWidgets.QSplitter(self.centralwidget)
self.splitter.setGeometry(QtCore.QRect(70, 390, 279, 28))
self.splitter.setOrientation(QtCore.Qt.Horizontal)
self.splitter.setObjectName("splitter")
self.Button_open_file = QtWidgets.QPushButton(self.splitter)
self.Button_open_file.setObjectName("Button_open_file")
self.Button_open_file.clicked.connect(lambda: self.openFile())
self.Button_convert = QtWidgets.QPushButton(self.splitter)
self.Button_convert.setObjectName("Button_convert")
self.Button_convert.clicked.connect(lambda: self.convertFile(path=path))
self.Button_exit = QtWidgets.QPushButton(self.splitter)
self.Button_exit.setObjectName("Button_exit")
self.Button_exit.clicked.connect(QApplication.quit)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 25))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.source_file.setText(_translate("MainWindow", "Source file:"))
self.new_file.setText(_translate("MainWindow", "New file:"))
self.Button_open_file.setText(_translate("MainWindow", "Open File"))
self.Button_convert.setText(_translate("MainWindow", "Convert"))
self.Button_exit.setText(_translate("MainWindow", "Exit"))
def openFile(self):
print("Opening File")
QFileDialog()
filename = QFileDialog.getOpenFileName(None, "Open XML File", "", "XML files (*.xml)")
path = filename[0]
print(path)
return path
def convertFile(self, path):
print("Converting")
print(str(path) + " path")
try:
with open(path, 'r', encoding='utf16') as f:
f.read()
f.close()
except:
print("Error")
x = etree.parse(path)
data_file = etree.tostring(x, pretty_print=True, encoding='unicode')
data_file = str(data_file).replace('\\n', '\n').replace(" ", "\t").replace("b'", "").replace("'", "")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())