我的问题在于os.system。在完成格式化之前,GUI冻结,我无法修复它。
class ImageDialog(QtGui.QMainWindow):
def __init__(self):
QtGui.QDialog.__init__(self)
self.ui = uic.loadUi("Recursos/main.ui",self)
self.connect(self.ui.proteger_Button, QtCore.SIGNAL("clicked()"),self,
QtCore.SLOT("protec()"))
@QtCore.pyqtSlot()
def protec(self):
self.USB = "G:"
comando = "format %s /fs:ntfs /q /v:test /y" %(self.USB)
os.system(comando)`
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = ImageDialog()
window.show()
sys.exit(app.exec_())
答案 0 :(得分:2)
您的案例中最简单的解决方法是添加:
from threading import Thread
到您的导入列表,然后:
@QtCore.pyqtSlot()
def protec(self):
self.USB = "G:"
comando = "format %s /fs:ntfs /q /v:test /y" %(self.USB)
t = Thread(target = lambda: os.system(comando))
t.start()
这样,GUI线程就不会等待外部进程完成。
您可能记住t
的值并以某种方式管理它,因此运行的线程数不会无限制地增加,以防外部命令挂起,或者跑了很长时间。
请注意,这不是处理外部进程的好方法。建议使用subprocess
模块。