2017-02-19 1 views
0

Я создал ui с помощью PyQT-дизайнера и преобразовал его в .py-файл, а затем вставил код, ранее написанный как скрипт командной строки, который разбивает файл .mp3 (какой адрес записанный в строкуEdit) в куски (число которых считывается из spinBox). При попытке запустить код я получаю FileNotFoundError относительно строк кода, которые находятся внутри функции def. Не следует ли его запускать только при нажатии кнопки? Я уверен, что код не должен быть выполнен, прежде чем нажимать кнопку, ergo не должен появляться код ошибки перед отображением пользовательского интерфейса и нажатием кнопки.Python возвращает FileNotFoundError о функции, определяемой при создании сценария с использованием PyQT5

Код ошибки:

Traceback (most recent call last): 
File "C:/Users/Kacper/Desktop/Apki/AtomSplitter/untitled1.py", line 95, in <module> 
ui.setupUi(MainWindow) 
File "C:/Users/Kacper/Desktop/Apki/AtomSplitter/untitled1.py", line 66, in setupUi 
self.pushButton.clicked.connect(atomsplitter(self, self.lineEdit.text(), self.spinBox.value())) 
File "C:/Users/Kacper/Desktop/Apki/AtomSplitter/untitled1.py", line 18, in atomsplitter 
Zawartosc = open(AdresPliku, 'rb') 
FileNotFoundError: [Errno 2] No such file or directory: '' 

Исходный код:

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'untitled.ui' 
# 
# Created by: PyQt5 UI code generator 5.8 
# 
# WARNING! All changes made in this file will be lost! 
import binascii, os 
from PyQt5 import QtCore, QtGui, QtWidgets 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(516, 191) 

     def atomsplitter(self, AdresPliku, Czesci): 
      NazwaPliku = os.path.basename(AdresPliku) 
      Zawartosc = open(AdresPliku, 'rb') 
      Zawartosc = Zawartosc.read() 
      Zawartosc = (binascii.hexlify(Zawartosc)) 
      PoczatekIndeks = Zawartosc.find(b"fffb") 
      PoczatekIndeks = PoczatekIndeks 
      Poczatek = Zawartosc[0:PoczatekIndeks] 
      Koniec = Zawartosc[len(Zawartosc) - 256:] 
      Klatki = Zawartosc[PoczatekIndeks:len(Zawartosc) - 256] 
      Czesci = int(Czesci) 
      Dlugosc = int(len(Klatki)/Czesci) 
      Czesc = [0] 
      Indeks = [0] 
      for x in range(1, Czesci + 1): 
       Indeks.append(Zawartosc.find(b"fffb", Dlugosc * x)) 
       Czesc.append(Klatki[Indeks[x - 1]:Indeks[x]]) 
       strin = Czesc[x] 
       print(strin[len(strin) - 20:]) 
       # if x == Czesci + 1: 
       # Czesc[x] = (Klatki[Indeks[x - 1]:]) 
       # print("Czesc" + str(x) + " " + str(len(Czesc[x]))) 
       CzescZawartosc = Poczatek + Czesc[x] + Koniec 
       CzescZawartosc = binascii.unhexlify(CzescZawartosc) 
       CzescPlik = open(NazwaPliku[:len(NazwaPliku) - 4] + str(x) + NazwaPliku[len(NazwaPliku) - 4:], "wb") 
       CzescPlik.write(CzescZawartosc) 
       CzescPlik.close() 
     self.centralwidget = QtWidgets.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) 
     self.textBrowser.setGeometry(QtCore.QRect(20, 60, 71, 31)) 
     self.textBrowser.setFocusPolicy(QtCore.Qt.NoFocus) 
     self.textBrowser.setObjectName("textBrowser") 
     self.textBrowser_2 = QtWidgets.QTextBrowser(self.centralwidget) 
     self.textBrowser_2.setGeometry(QtCore.QRect(20, 100, 91, 31)) 
     self.textBrowser_2.setFocusPolicy(QtCore.Qt.NoFocus) 
     self.textBrowser_2.setObjectName("textBrowser_2") 
     self.spinBox = QtWidgets.QSpinBox(self.centralwidget) 
     self.spinBox.setGeometry(QtCore.QRect(130, 100, 61, 31)) 
     self.spinBox.setProperty("value", 2) 
     self.spinBox.setObjectName("spinBox") 
     self.pushButton = QtWidgets.QPushButton(self.centralwidget) 
     self.pushButton.setGeometry(QtCore.QRect(400, 140, 91, 31)) 
     self.pushButton.setObjectName("pushButton") 


     self.lineEdit = QtWidgets.QLineEdit(self.centralwidget) 
     self.lineEdit.setGeometry(QtCore.QRect(120, 60, 271, 31)) 
     self.lineEdit.setObjectName("lineEdit") 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.pushButton.clicked.connect(atomsplitter(self, self.lineEdit.text(), self.spinBox.value())) 
     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 
     MainWindow.setTabOrder(self.textBrowser_2, self.spinBox) 
     MainWindow.setTabOrder(self.spinBox, self.textBrowser) 

    def retranslateUi(self, MainWindow): 
     _translate = QtCore.QCoreApplication.translate 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 
     self.textBrowser.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" 
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" 
"p, li { white-space: pre-wrap; }\n" 
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n" 
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Adres pliku:</p></body></html>")) 
     self.textBrowser_2.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" 
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" 
"p, li { white-space: pre-wrap; }\n" 
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n" 
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Liczba części:</p></body></html>")) 
     self.spinBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>Liczba części</p></body></html>")) 
     self.pushButton.setText(_translate("MainWindow", "Split!")) 
     self.lineEdit.setPlaceholderText(_translate("MainWindow", "C:\\\\Users\\\\")) 


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_()) 

Единственные правки, которые я сделал это функция atomsplitter, импорт ОС и binascii, и добавляя связь между кнопкой и функцией atomsplitter.

Извините, если что-то трудно понять, английский не является моим первым языком.

+0

нет, это не ссылка на обратный вызов, это прямой вызов 'self.pushButton.clicked.connect (atomsplitter (я, я .lineEdit.text(), [...] 'Это api просто ожидает ссылки на обратный вызов, что-то вроде' atomplitter'. Вместо этого вы вызываете функцию напрямую и передаете ее обратно в регистратор обратного вызова. – pvg

ответ

0

Когда вы подключаете сигнал к функции, вы должны сделать это через имя и его вызов, то есть myslot, а не myslot(). Но вы также можете использовать lambda.

Изменение:

self.pushButton.clicked.connect(atomsplitter(self, self.lineEdit.text(), self.spinBox.value())) 

к:

self.pushButton.clicked.connect(lambda: atomsplitter(self, self.lineEdit.text(), self.spinBox.value())) 
+0

Я передаю переменные функции тогда? Если бы я хотел сделать это без 'lambda'? – Achernar

+0

Какой параметр вы хотите потратить? – eyllanesc

+0

Я хотел бы использовать контент lineEdit как AdresPliku и spinBox как Czesci в функции atomplitter. – Achernar

Смежные вопросы