문제

하 wxpython 첫 시간입니다.내가 쓴 a GUI for python 프로그램을 실행할 때,그 생산의 일부 오류 GUI 지만,GUI 라,매우 신속하게 충분히 빠르게 대할 수 없을 읽어 오류 정보.

이 있는 로그인에 대한 오류 메시지가?(나 Mac OS X)또는 다른 방법이 있을까?

감사에 대해 사전에 도움이됩니다.

업데이트:여기에는 코드를 문제...

#!/usr/bin/python

import wx

class MyApp (wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(390, 350))
    menubar = wx.MenuBar()
    help = wx.Menu()
    help.Append(ID_ABOUT, '&About')
    self.Bind(wx.EVT_MENU, self.OnAboutBox, id=wx.ID_ABOUT)
    menubar.Append(help, '&Help')
    self.SetMenuBar(menubar)

    self.Centre()
    self.Show(True)

    panel = wx.Panel(self, -1)

    font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
    font.SetPointSize(9)

    vbox = wx.BoxSizer(wx.VERTICAL)

    hbox1 = wx.BoxSizer(wx.HORIZONTAL)
    st1 = wx.StaticText(panel, -1, 'Class Name')
    st1.SetFont(font)
    hbox1.Add(st1, 0, wx.RIGHT, 8)
    tc = wx.TextCtrl(panel, -1)
    hbox1.Add(tc, 1)
    vbox.Add(hbox1, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 10)

    vbox.Add((-1, 10))

    hbox2 = wx.BoxSizer(wx.HORIZONTAL)
    st2 = wx.StaticText(panel, -1, 'Matching Classes')
    st2.SetFont(font)
    hbox2.Add(st2, 0)
    vbox.Add(hbox2, 0, wx.LEFT | wx.TOP, 10)

    vbox.Add((-1, 10))

    hbox3 = wx.BoxSizer(wx.HORIZONTAL)
    tc2 = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE)
    hbox3.Add(tc2, 1, wx.EXPAND)
    vbox.Add(hbox3, 1, wx.LEFT | wx.RIGHT | wx.EXPAND, 10)

    vbox.Add((-1, 25))

    hbox4 = wx.BoxSizer(wx.HORIZONTAL)
    cb1 = wx.CheckBox(panel, -1, 'Case Sensitive')
    cb1.SetFont(font)
    hbox4.Add(cb1)
    cb2 = wx.CheckBox(panel, -1, 'Nested Classes')
    cb2.SetFont(font)
    hbox4.Add(cb2, 0, wx.LEFT, 10)
    cb3 = wx.CheckBox(panel, -1, 'Non-Project classes')
    cb3.SetFont(font)
    hbox4.Add(cb3, 0, wx.LEFT, 10)
    vbox.Add(hbox4, 0, wx.LEFT, 10)

    vbox.Add((-1, 25))

    hbox5 = wx.BoxSizer(wx.HORIZONTAL)
    btn1 = wx.Button(panel, -1, 'Ok', size=(70, 30))
    hbox5.Add(btn1, 0)
    btn2 = wx.Button(panel, -1, 'Close', size=(70, 30))
    hbox5.Add(btn2, 0, wx.LEFT | wx.BOTTOM , 5)
    vbox.Add(hbox5, 0, wx.ALIGN_RIGHT | wx.RIGHT, 10)

    panel.SetSizer(vbox)
    self.Centre()
    self.Show(True)

    def OnAboutBox(self, event):
        description = """ describe my app here """

        licence = """ blablabla """


        info = wx.AboutDialogInfo()

        info.SetIcon(wx.Icon('icons/icon.png', wx.BITMAP_TYPE_PNG))
        info.SetName('')
        info.SetVersion('1.0')
        info.SetDescription(description)
        info.SetCopyright('')
        info.SetWebSite('')
        info.SetLicence(licence)
        info.AddDeveloper('')
        info.AddDocWriter('')
        info.AddArtist('')
        info.AddTranslator('')

        wx.AboutBox(info) 

app = wx.App()
MyApp (None, -1, 'Go To Class')
app.MainLoop()
도움이 되었습니까?

해결책

에 대한 확실하지 않 mac 버전이지만,wxPython 는 방식으로 구축하여 리디렉션 오류를 창(는 것이 불행하게도 가까운 경우 응용 프로그램이 충돌하지만,그것은 유용한 잡기 위한 오류를 자동으로 실패합니다)또는 로그 파일이(만 후 업데이트 응용 프로그램이 닫힙니다):

app = wx.App(redirect=True) 
app = wx.App(redirect=True,filename="mylogfile.txt")

이러한 관계없이 작동 방법의 응용 프로그램을 시작합니다.보 에 대한 더 많

다른 팁

다음은 메시지를 통해 콘솔 대신 GUI에서 오류를보고하는 방법입니다. 당신은 예외가 잡히는 곳 어디에서나 show_error () 메소드를 사용할 수 있습니다. 여기서는 최상위 수준에서 잡히는 것입니다. 오류를 처리 할 수있는 경우 오류가 발생한 후 앱이 계속 실행되도록 변경할 수 있습니다.

import wx
import sys
import traceback

def show_error():
    message = ''.join(traceback.format_exception(*sys.exc_info()))
    dialog = wx.MessageDialog(None, message, 'Error!', wx.OK|wx.ICON_ERROR)
    dialog.ShowModal()

class Frame(wx.Frame):
    def __init__(self):
        super(Frame, self).__init__(None, -1, 'My Frame')
    def cause_error(self):
        raise Exception, 'This is a test.'

def main():
    app = wx.PySimpleApp()
    try:
        frame = Frame()
        frame.Show()
        frame.cause_error()
        app.MainLoop()
    except:
        show_error()

if __name__ == '__main__':
    main()

디버거와 함께 파이썬 IDE에서 시작하십시오.

실행 윙 사이드 즉각적인 문제는 두 가지 문제를 정확히 찾아냅니다.

  • ID_ABOUT 해야한다 wx.ID_ABOUT (라인 #4 __init__).
  • OnAboutBox (전체 방법)은 한 단계 너무 많이 들여 쓰기됩니다. 서면으로, 그것은 내부의 로컬 기능입니다 __init__. 전체 메소드를 한 단계를 왼쪽으로 이동하여 방법으로 만듭니다. MyApp.

Python 파일을 두 번 클릭하는 대신 아래에 언급 된대로 명령 줄에서 응용 프로그램을 시작하십시오 (OS X에서 'Terminal'이라고 생각). 이런 식으로 응용 프로그램이 충돌하면 스택 추적이 표시됩니다.

python nameofscript.py

또는 출력을 로그 파일로 리디렉션 할 수 있습니다.

f=open('app.log','w')
import sys
sys.stdout=f
sys.stderr=f

프로그램에 인쇄문을 추가하면 어떻게 시작되는지, 어디에서 죽어 가는지 알 수 있습니다 (이미 말한대로 터미널에서 실행하여).

Python IDE에서 프로젝트를 실행할 수도 있습니다. 에릭 아이데. 당신은 추적하고 변수와 다른 멋진 물건을 볼 수 있다는 추가 보너스를 얻습니다! :-)

Spyder를 사용하는 경우 F6을 누르면 "실행 후 Python 통역사와 상호 작용"을 확인하십시오. 창이 닫히지 않으며 오류 메시지가 표시됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top