首页 > 解决方案 > Python shutil.copy 导致 PyQt GUI 冻结

问题描述

我有一个由 PyQt 创建的 GUI。它适用于复制 Tkinter 文件选择对话框选择的任何文件。我选择了要发送的文件,但是当我尝试发送它时,shutil.copy() 函数开始运行。然而,与此同时,GUI 冻结并且无论如何都没有反应。

class main(QMainWindow):

def __init__(self):
    super().__init__()
    self.MyUI()
    self.root = Tk()
    self.root.withdraw()

    self.isAlive = True
    self.lock= threading.Lock()

    self.angleDiffPitch = 0
    self.angleDiffRoll = 0
    self.angleDiffYaw = 0

    self.tempDataForPacketNumber = 0

    # gui.py
    self.gui = gui()
    self.gui.setupUi(self)
    self.msg = self.gui.msg

    self.m1 = mesh.Mesh.from_file('assets/uydu.stl')

    self.plottingThread = threading.Thread(
        target=self.pltAndSimFunc)
    self.plottingThread.daemon = True

    # start button
    self.gui.baslatButton.clicked.connect(self.startGcs)

    # stop button
    self.gui.durdurButton.clicked.connect(self.stopGcs)

    # video secme
    self.gui.secButton.clicked.connect(self.chooseFunc)

    # ayrilma
    self.gui.ayrilButton.clicked.connect(self.ayrilFunc)

    # video gönderme
    self.gui.gonderButton.clicked.connect(self.sendFileThread)

    # motor tahrik
    self.gui.tahrikButton.clicked.connect(self.tahrikFunc)

    # motor tahrik stop
    self.gui.tahrikButtonStop.clicked.connect(self.tahrikFuncStop)

def chooseFunc(self):
    fileName = askopenfile(mode='r')
    self.gui.lineEdit.setText(str(fileName.name))
    self.gui.gonderButton.setEnabled(True)

    self.DIRECTORY = self.gui.lineEdit.text()
    self.TARGET_DIRECTORY = r"Z:/"
    self.BASE_NAME = os.path.basename(self.DIRECTORY)

def sendFile(self):
    shutil.copy(self.DIRECTORY, self.TARGET_DIRECTORY+self.BASE_NAME)

    if(os.path.exists(self.TARGET_DIRECTORY+self.BASE_NAME)):
        self.msg.setWindowTitle('İşlem Tamamlandı')
        self.msg.setText('Dosya gönderimi başarıyla tamamlandı')
        self.msg.setIcon(QtWidgets.QMessageBox.Information)
        x = self.msg.exec_()
        dt.videoPaketGuncellemeKomut()

def sendFileThread(self):
    sendThread = threading.Thread(target=self.sendFile)
    sendThread.start()

我尝试使用线程,但它不起作用,也许我无法编写它的结构。我怎么解决这个问题?这是我的代码:

感谢您的帮助?:)

标签: pythonpython-3.xpyqtpyqt5python-multithreading

解决方案


推荐阅读