2017-02-19 19 views
0

我創建使用PyQt的設計者的UI的腳本時被定義,並轉換它.py文件,先前寫入的命令行腳本其將.MP3文件(其是ADRESS然後粘貼代碼寫入lineEdit)分塊(其數量從spinBox讀取)。當試圖運行代碼時,我得到了關於def函數內部代碼行的FileNotFoundError。不應該只在按下按鈕時才運行?我確信在按下按鈕之前不應該執行代碼,因此,在顯示UI和按下按鈕之前,不應出現錯誤代碼。的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只是需要一個參考的回調,像'atomsplitter',而是要直接調用該函數,並通過其返回到回調註冊商。 – 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

我想atomsplitter功能使用lineEdit內容AdresPliku和SPINBOX爲Czesci。 – Achernar