문제

모달 대화 상자를 만들고 싶지만 모달 방식으로 작동하지 않아야합니다. 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()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top