[Python] wxPythhon 전송 폴더 사용하기 (진도 대화상자, 다중 루틴 구현)
진행 대화 상자란?
파일 전송하고 설치할 때 나오는 거예요.
wxPythhon을 사용하여 전송 파일을 만들 때 표시되는 진행 대화상자입니다.
저번의 글의 계속.
wx.ProgressDialog
ProgressDialog
범주를 사용하여 진행 대화 상자를 표시합니다.클래스 매개변수는 다음과 같습니다.
・title(string) - 대화상자의 왼쪽 위 모서리에 표시되는 문
• 메시지 (string) - 실행 시 표시되는 진행률 정보(%~%, 등)
・maximum(int) – 진행률 막대의 최대값(여러 부분으로 분할됨).기본값은 100이며 기본적으로 변경하지 않아도 됩니다.
・parent(wx.Window) - 대화상자의 상위 객체를 지정합니다.안 바꿔도 돼.
・style(int) - 대화상자의 스타일을 변경합니다.(후술)
스타일 정보
대화 상자가 표시되면 기능을 옵션으로 추가할 수 있습니다.
이번에는 다음과 같은 기능을 추가한다.
・wx.PD_AUTO_HIDE - 프로세스가 끝나면 대화 상자가 자동으로 닫힙니다.
・wx.PD_CAN_ABORT - Close 버튼을 표시하고 중지를 누릅니다.
・wx.PD_REMAINING_TIME - 남은 시간을 표시합니다.
스타일공식 문서에 대한 일람표가 있습니다.
# プログレスダイアログ作成
dlg = wx.ProgressDialog(
title="コピー中",
message="0/100",
maximum=100,
style=wx.PD_AUTO_HIDE | wx.PD_CAN_ABORT | wx.PD_REMAINING_TIME)
# ダイアログ表示
dlg.ShowModal()
ProgressDialog.Update
Update
사용 방법을 통해 진도표와 메시지를 업데이트할 수 있습니다. # プログレスダイアログ作成
dlg = wx.ProgressDialog(
title="コピー中",
message="0/100",
maximum=100,
style=wx.PD_AUTO_HIDE | wx.PD_CAN_ABORT | wx.PD_REMAINING_TIME)
# ダイアログ表示
dlg.ShowModal()
rate = 0
# ループ処理
while rate < 100:
# 0.5秒待つ
time.sleep(0.5)
# 値の更新
dlg.Update(value=rate, newmsg="%d/100" % rate + "%")
dlg.Destroy()
폴더 용량 비교
진도표는 이미 준비가 되었으며, 다음은 프로세스에 따라 변화하는 진도표입니다.
이번에는 폴더 전송을 목적으로 합니다.
• 대상 폴더의 용량
• 폴더 용량 이동
이 두 개를 비교해 보자.
동피하 기사1가 있어서 다 썼어요.
# フォルダサイズ取得
def get_dir_size(self, path="."):
total = 0
with os.scandir(path) as it:
for entry in it:
if entry.is_file():
total += entry.stat().st_size
elif entry.is_dir():
total += self.get_dir_size(entry.path)
return total
그리고 사이즈의 결과를 백분율로 비교하면 됩니다.방금 진도 대화상자가 업데이트된 곳에 적용됩니다.
# ボタンのクリックでプログレスバー表示
def progress(self, event):
# プログレスダイアログ
dlg = wx.ProgressDialog(
title="コピー中",
message="0/100",
maximum=100,
style=wx.PD_AUTO_HIDE | wx.PD_CAN_ABORT | wx.PD_REMAINING_TIME)
dlg.ShowModal()
rate = 0
# ループ処理
while rate < 100:
# 0.5秒待つ
time.sleep(0.5)
# サイズから割合を算出
rate = self.get_dir_size(
self.old.GetLabel())/self.get_dir_size(self.old.GetLabel())*100
# 値の更新
dlg.Update(value=rate, newmsg="%d/100" % rate + "%")
dlg.Destroy()
다중 스레드
같은 라인에서 '대화상자 표시 관련' 과 '파일 전송' 을 할 때
처리
応答していません
를 참을 수 없는 로그가 나왔습니다. 창이 다운되었습니다.따라서 '대화상자의 디스플레이 연결' 과 '파일의 전송' 을 라인에서 분리하면 효과가 좋습니다.
def done(self,event):
#別スレッドを生成する。
thr = threading.Thread(target=self.replace_folder, args=(event,))
thr_progress = threading.Thread(target=self.progress, args=(event,))
thr.start()
thr_progress.start()
우리는 단독 라인을 만들고 실행에만 사용할 방법을 만들었습니다.실행 단추를 누르면 여러 개의 단서를 만들고 실행합니다.
완료된 대화상자는 여기에 있습니다.
파이톤을 거의 접하지 않았지만 앞으로 Syling 같은 마법도 사용할 수 있도록 노력하겠습니다.
참조 링크 ↩
Reference
이 문제에 관하여([Python] wxPythhon 전송 폴더 사용하기 (진도 대화상자, 다중 루틴 구현)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/OKsaiyowa/items/121149be9c788265d653텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)