Я создаю простой контактный компилятор, который в настоящее время использует три модуля: один для класса person, который принимает информацию, один для класса newContact Frame, который позволяет пользователю отправлять информацию, и один для первой страницы Класс кадра, в котором перечислены имена контактов, и дает пользователям параметры для редактирования списка.Проблема закрытия рамки wxpython из другого модуля
Проблема, с которой я столкнулась, - это когда я вызываю основную функцию класса newContact внутри класса передней страницы, он не выходит из MainLoop. Несмотря на то, что я уничтожил окно newContact, и обе программы закрываются нормально, когда они не вызываются друг от друга. Вот соответствующий код:
import wx
import person
contacts = []
names = []
class newContact(wx.Frame):
def __init__(self, *args, **kwargs):
super(newContact, self).__init__(*args, **kwargs)
self.basicWindow()
self.Show()
def basicWindow(self):
panel = wx.Panel(self)
vertical = wx.BoxSizer(wx.VERTICAL)
heading = wx.StaticText(panel, label = 'Create New Contact')
vertical.Add(heading, flag = wx.LEFT | wx.TOP, border = 5)
nameBox = wx.BoxSizer(wx.HORIZONTAL)
nameText = wx.StaticText(panel, label = 'Name:')
nameBox.Add(nameText)
self.nameEntry = wx.TextCtrl(panel)
nameBox.Add(self.nameEntry, proportion = 1, flag = wx.LEFT, border = 50)
vertical.Add(nameBox, flag = wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT, border = 10)
phoneBox = wx.BoxSizer(wx.HORIZONTAL)
phoneText = wx.StaticText(panel, label = 'Number:')
phoneBox.Add(phoneText)
self.phoneEntry = wx.TextCtrl(panel)
phoneBox.Add(self.phoneEntry, proportion = 1, flag = wx.LEFT, border = 38)
vertical.Add(phoneBox, flag = wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT, border = 10)
mailBox = wx.BoxSizer(wx.HORIZONTAL)
mailText = wx.StaticText(panel, label = 'Email:')
mailBox.Add(mailText)
self.mailEntry = wx.TextCtrl(panel)
mailBox.Add(self.mailEntry, proportion = 1, flag = wx.LEFT, border = 53)
vertical.Add(mailBox, flag = wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT, border = 10)
submit = wx.Button(panel, label = 'Submit', size = (70,30))
vertical.Add(submit, flag = wx.ALIGN_RIGHT | wx.TOP | wx.RIGHT, border = 10)
self.Bind(wx.EVT_BUTTON, self.registerData)
panel.SetSizer(vertical)
def registerData(self, e):
name = self.nameEntry.GetValue()
name = name.title()
while True:
try:
number = int(self.phoneEntry.GetValue())
break
except ValueError:
number = 'a'
break
email = self.mailEntry.GetValue()
contact = person.Person(name, number, email)
names.append(name)
contacts.append(contact)
print('hello')
self.quit()
def quit(self):
self.Destroy()
def main():
app = wx.App()
newContact(None, title = 'New Contact', size = (405, 200), style= wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)
app.MainLoop()
import wx
import newContact
class Front(wx.Frame):
def __init__(self, *args, **kwargs):
super(Front, self).__init__(*args, **kwargs)
self.interaction()
def interaction(self):
panel = wx.Panel(self)
wholeGrid = wx.BoxSizer(wx.VERTICAL)
mainBox = wx.BoxSizer(wx.HORIZONTAL)
title = wx.StaticText(panel, label = ' Contact List')
wholeGrid.Add(title, flag = wx.TOP | wx.LEFT, border = 10)
self.contactList = wx.ListBox(panel)
mainBox.Add(self.contactList, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 10)
buttonList = wx.BoxSizer(wx.VERTICAL)
new = wx.Button(panel, id = wx.ID_NEW, label = 'New', size = (100,30))
buttonList.Add(new)
edit = wx.Button(panel, id = wx.ID_EDIT, label = 'Edit', size = (100,30))
buttonList.Add(edit, flag = wx.TOP, border = 5)
delete = wx.Button(panel, id = wx.ID_DELETE, label = 'Delete', size = (100,30))
buttonList.Add(delete, flag = wx.TOP, border = 5)
mainBox.Add(buttonList, flag = wx.ALIGN_RIGHT | wx.TOP | wx.RIGHT, border = 10)
wholeGrid.Add(mainBox, proportion = 1, flag = wx.EXPAND)
panel.SetSizer(wholeGrid)
self.Bind(wx.EVT_BUTTON, self.createNew, id = wx.ID_NEW)
menu = wx.MenuBar()
fileMenu = wx.Menu()
fileMenu.Append(wx.ID_EXIT, 'Exit')
menu.Append(fileMenu, 'File')
self.SetMenuBar(menu)
self.Show(True)
def createNew(self, e):
newContact.main()
def main():
app = wx.App()
Front(None, title = "Contacts", size = (405,600), style = wx.SYSTEM_MENU | wx.CLOSE_BOX | wx.CAPTION)
app.MainLoop()
Спасибо за любую помощь, синтаксис кода комментарии также будут оценены.
Полосатый до минимального кода, который может быть запущен, и представляет проблему, с которой вам легче будет реагировать. – Yoriz