Прочитав ответ Рольфа Саксонского, я понял, что мой собственный ответ покрывает только половину проблемы в вопросе.Итак, вот обновленный ответ.
Обновленный ответ
Я предполагаю фразу в конце вопроса " Я хочупрограмма, продолжаемая после вопросов", относится к тому факту, что приведенный код не показывает никакого окна после того, как два wx.TextEntryDialog
показаны и закрыты.
В этом случае программа действительно продолжаетбежать после того, как два wx.TextEntryDialog
показаны и закрыты.Даже если после двух wx.TextEntryDialog
ничего не отображается, в терминале видно, что подсказка терминала не возвращается, поэтому программа все еще работает.
Причина этого поведения двоякая.
1.- После окончания использования двух wx.TextEntryDialog
вы больше ничего не показываете.Таким образом, основной цикл программы продолжает работать, но нечего показывать.Это можно исправить, просто изменив метод main в вашем коде на:
def main() :
app = wx.App()
frame = varMenu(None, title = 'How would you like to edit your video?')
frame.Show()
app.MainLoop()
Теперь главное окно вашей программы отображается после двух wx.TextEntryDialog
, но если вы закроете главное окно, появится окно терминала.не возвращает, что означает, что ваша программа все еще работает.
2.- Проблема здесь в том, что вы создаете экземпляр wx.TextEntryDialog
, а затем вы показываете экземпляр с ShowModal()
, но не уничтожаетеэкземпляр после окончания его использования.В соответствии с документами wxPython для ShowModal()
:
эта функция создает временный цикл обработки событий, который имеет приоритет над главным циклом событий приложения (см. Wx.EventLoopBase) и который уничтожается, когда диалоговое окноотклонено
Для некоторых wx.Dialog
достаточно закрыть окно или нажать ОК (Да / Нет / Отмена), чтобы разрушить временную петлю событий.Для других вам нужно вызвать метод Destroy()
, чтобы добиться этого.Поэтому лучше сделать привычку звонить Destroy()
после финиша, используя wx.Dialog
.Поэтому ваш код должен быть изменен на:
import wx
class varMenu(wx.Frame) :
def __init__(self, *args, **kwargs) :
super(varMenu, self).__init__(*args, **kwargs)
self.varGUI()
def varGUI (self) :
global minVolAns
global frameRateAns
minVol = wx.TextEntryDialog(None, "What is the minimum volume of the video?", "Minimum Volume",
"Input Here")
if minVol.ShowModal()==wx.ID_OK :
minVolAns=minVol.GetValue()
minVol.Destroy()
frameRate = wx.TextEntryDialog(None, "What framerate would you like?", "Framerate",
"Input Here")
if frameRate.ShowModal()==wx.ID_OK :
frameRateAns=frameRate.GetValue()
frameRate.Destroy()
def main() :
app = wx.App()
frame = varMenu(None, title = 'How would you like to edit your video?')
frame.Show()
app.MainLoop()
main()
Теперь, когда вы закончите использовать два wx.TextEntryDialog
и закроете главное окно, не будет свободного временного цикла обработки событий, и программа фактически прекратит работу.
Оригинальный ответ:
Добро пожаловать в StackOverflow
Основной цикл вашей программы продолжается.В терминале видно, что подсказка терминала не возвращается после того, как все диалоговые окна показаны, потому что основной цикл продолжает работать.Проблема в том, что вы не показываете ничего, кроме диалогов.
Просто измените метод main
на:
def main() :
app = wx.App()
frame = varMenu(None, title = 'How would you like to edit your video?')
frame.Show()
app.MainLoop()
, и вы увидите главное окно после диалогов.