2013-09-23 1 views
0
def creabackuno(): 
    startbar() 
    messagebox.showinfo("Wait..","I am creating the backup, please wait...") 
    try: 
     copytree(path,r"backup\dirbackup1\.minecraft") 
     messagebox.showinfo("OK!","Backup (1) created!") 
     stopbar() 
    except OSError as exc: 
     messagebox.showerror("Nope!","There is already a backup to restore") 
     stopbar() 

나는 진행 막대에 문제가 복사 할 때 :GUI 동결 또 shutil 파일이

startbar() 그래픽 인터페이스의 진행 막대를 시작,하지만 때 시작 또 shutil (copytree (경로, R "백업 \의 dirbackup1 .minecraft ")) 인터페이스가 멈추고 진행 표시 줄이 끝날 때까지 중지합니다. 감사

난 당신이 일을 끝낼 때까지 그래서 모든 코드의 실행이 중지됩니다, 가난한 영어

답변

1

copytree는 동기 기능을 내 죄송

파이썬 3.3을 사용하고 있습니다. 실패와 성공이 잠시 멈출 경우

from thread import start_new_thread as snt 
#from _thread import start_new_thread as snt for python 3 

def copy(onError,onEnd): 
    try: copytree(path,r"backup\dirbackup1\.minecraft") 
    except: 
     onError() 
     return 
    onEnd() 

def onEnd(): 
    messagebox.showinfo("OK!","Backup (1) created!") 
    stopbar() 

def onError(): 
     messagebox.showerror("Nope!","There is already a backup to restore") 
     stopbar() 

#then call with 

snt(copy,(onError,onEnd)) 

경영진의 OnError : Tkinter를 슬픈하지만 스레드 안전 내가 다른 스레드에서 해당 명령을 넣어하는 것이 좋습니다이어야한다.

+0

, 그는 파이썬 3를 사용하고,'python3에서 thread' 모듈 인 진행 막대의 값이 증가하여 값을 의미 모든 self.pgBar.step(x) 문 후 사용 self.Frame.update_idletasks()'_thread' – JadedTuna

+0

당신은 다른이 해결책? 이것은 내 코드에서 구현하기가 매우 어렵습니다. – SergiX44

1

진행률 막대에 표시되는 내용은 무엇입니까? 복사 된 파일의 비율을 표시하려는 경우 파일의 전체 길이/바이트를 먼저 가져온 다음 주기적으로 복사 된 바이트 수로 업데이트해야합니다. 그렇게하면 "밀리 초"마다 복사 할 파일의 크기를 확인하기 위해 "after"를 사용해야 할 것입니다. (필자는 여기서 추측하고있는 것처럼 생각합니다. 그러나 검색은 이미 이런 식으로 작업 한 사람이 있어야합니다.) https://mail.python.org/pipermail/tkinter-discuss/2010-December/002613.html 첫 번째 링크입니다. 원하는 것 이상이지만 도움이 될 수 있습니다.

0

'X'가

그는 말했다
+0

진행률 막대는 불확정 모드에서 실행되지만, 파일 복사를 시작하면 인터페이스가 정지됩니다 – SergiX44