WXProgressDialog WXDialog의 동작과 같은 WXPROGRESSDIALOG
-
06-07-2019 - |
문제
모달 대화 상자를 만들고 싶지만 모달 방식으로 작동하지 않아야합니다. IE 제어 흐름은 계속되어야합니다.
만약 내가한다면
dlg = wx.Dialog(parent)
dlg.ShowModal()
print "xxx"
dlg.Destroy()
"XXX"는 인쇄되지 않지만 진행 상황의 경우
dlg = wx.ProgressDialog.__init__(self,title, title, parent=parent, style=wx.PD_APP_MODAL)
print "xxx"
dlg.Destroy()
"XXX"가 인쇄됩니다
그래서 기본적으로 정상적인 대화를 위해 wx.pd__app__modal을 달성하고 싶습니까?
해결책 2
wx.pd_app_modal 스타일을 사용하여 wx.dialog는 프로그램 흐름을 중지하지 않고 모달이 될 수있게되며, 앱에 대한 사용자 입력 만 차단되었다고 생각하면 PD_APP_MODAL은 진행 대화 상자만을위한 것이라고 생각했습니다.
다른 팁
그냥 사용하십시오 Show
대신에 ShowModal
.
당신의 기능인 경우 ( print "xxx"
부품) 오랫동안 실행됩니다. 수동으로 전화해야합니다. wx.SafeYield
마다 너무 자주 또는 작업을 별도의 스레드로 옮기고 대화 상자에 사용자 정의 이벤트를 보냅니다.
하나 더 팁. 내가 이해 한 바와 같이, 당신은 모달 대화 상자가 표시된 후에 일부 코드를 실행하고 싶다. EVT_INIT_DIALOG
그것은 바로 그 달성합니다.
import wx
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
btn = wx.Button(self, label="Show Dialog")
btn.Bind(wx.EVT_BUTTON, self.ShowDialog)
def ShowDialog(self, event):
dlg = wx.Dialog(self)
dlg.Bind(wx.EVT_INIT_DIALOG, lambda e: wx.CallAfter(self.OnModal, e))
dlg.ShowModal()
dlg.Destroy()
def OnModal(self, event):
wx.MessageBox("Executed after ShowModal")
app = wx.PySimpleApp()
app.TopWindow = TestFrame()
app.TopWindow.Show()
app.MainLoop()
제휴하지 않습니다 StackOverflow