2015-07-13 5 views
0

я пытаюсь создать графический интерфейс для моей программы Python в Windows, и я вроде запутаться атм ..Как я должен использовать wxFormBuilder Python GUI-код в моих приложениях?

я создал графический интерфейс с помощью wxFormBuilder и это выглядит следующим образом:

# -*- coding: utf-8 -*- 

########################################################################### 
## Python code generated with wxFormBuilder (version Jun 17 2015) 
## http://www.wxformbuilder.org/ 
## 
## PLEASE DO "NOT" EDIT THIS FILE! 
########################################################################### 

import wx 
import wx.xrc 

########################################################################### 
## Class MainFrame 
########################################################################### 

class MainFrame (wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = u"Editor_SPED_LP", pos = wx.DefaultPosition, size = wx.Size(320,255), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL) 

     self.SetSizeHintsSz(wx.Size(320,255), wx.Size(320,255)) 

     bSizer1 = wx.BoxSizer(wx.VERTICAL) 

     self.m_textCtrl2 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_textCtrl2, 0, wx.ALL|wx.EXPAND, 5) 

     self.m_btn_abrirArq = wx.Button(self, wx.ID_ANY, u"Abrir arquivo...", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_btn_abrirArq, 0, wx.ALL, 5) 

     self.m_btn_editarTxt = wx.Button(self, wx.ID_ANY, u"Editar .txt", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_btn_editarTxt, 0, wx.ALL, 5) 

     self.m_gauge1 = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) 
     self.m_gauge1.SetValue(0) 
     bSizer1.Add(self.m_gauge1, 0, wx.ALL, 5) 

     self.m_btn_ajuda = wx.Button(self, wx.ID_ANY, u"Ajuda", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_btn_ajuda, 0, wx.ALL, 5) 

     self.m_staticText2 = wx.StaticText(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) 
     self.m_staticText2.Wrap(-1) 
     bSizer1.Add(self.m_staticText2, 0, wx.ALL, 5) 

     self.m_btn_sair = wx.Button(self, wx.ID_ANY, u"Sair", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_btn_sair, 0, wx.ALL, 5) 


     self.SetSizer(bSizer1) 
     self.Layout() 

     self.Centre(wx.BOTH) 

     # Connect Events 
     self.m_btn_abrirArq.Bind(wx.EVT_BUTTON, self.abrirArquivo) 
     self.m_btn_editarTxt.Bind(wx.EVT_BUTTON, self.editarTxt) 
     self.m_btn_ajuda.Bind(wx.EVT_BUTTON, self.janelaAjuda) 
     self.m_btn_sair.Bind(wx.EVT_BUTTON, self.sair) 

    def __del__(self): 
     pass 


    # Virtual event handlers, overide them in your derived class 
    def abrirArquivo(self, event): 
     event.Skip() 

    def editarTxt(self, event): 
     event.Skip() 

    def janelaAjuda(self, event): 
     event.Skip() 

    def sair(self, event): 
     event.Skip() 

, когда я запустить его из терминала он не показывает никаких ошибок ...

how am i supposed to use it with my application?

я нашел этот учебник here, но я не мог понял ..

также я пытался добавить этот код в конце сценария:

if __name__ == "__main__": 
     app = wx.App(False) 
     frame = MainFrame() 
     frame.Show() 
     app.MainLoop() 

и получил эту ошибку:

File "gui.py", line 80, in <module> 
    frame = MainFrame(seld,parent) 
NameError: name 'self' is not defined 

так .. это выглядит как код графического интерфейса отлично, проблема что я не знаю, как его инициализировать и добавить некоторые функции.

Может кто-нибудь помочь мне с этим, пожалуйста?

ответ

0

я получил sucessfull попытку с помощью:

#importing wx files 
import wx 
#import the newly created GUI file 
import gui 


#inherit from the MainFrame created in wxFormBuilder and create janelaPrincipal 
class janelaPrincipal(gui.MainFrame): 
    #constructor 
    def __init__(self,parent): 
     #initialize parent class 
     gui.MainFrame.__init__(self,parent) 


    #what to do when each function button is clicked 

    def editarTxt(self,event): 
     try: 
      #write the editarTxt code inside here 

     except Exception: 
      print 'error' 


#mandatory in wx 
#create an app, False stands for not deteriction stdin/stdout 
#refer manual for details 
app = wx.App(False) 

#create an object of janelaPrincipal 
frame = janelaPrincipal(None) 
#show the frame 
frame.Show(True) 
#start the applications 
app.MainLoop() 

, но я на самом деле не знаю, почему он работал .. еще нужно какое-то объяснение, пожалуйста .. :-)

2

Проблема у Вас есть это с помощью функции/метода init. Он принимает два аргумента (self & parent), которые вы должны указать при создании объекта MainFrame.

def __init__(self, parent): 
    ...... 

самостоятельно задается автоматически (вы явно не указать его)

родительский установлен в None (вы явно указать его в качестве None)

Смотрите снимок экрана ниже и wxFormBuilder - Tutorial on “A GUI for making GUIs” for Python

enter image description here

+0

Где скриншот? –

+0

Изображение находится по адресу: http://i.stack.imgur.com/F3jhO.png –

+0

Теперь он отображается. Раньше это был просто прямоугольный белый ящик –

1

Вам просто нужно добавить следующие строки в нижней части программы:

if __name__ == '__main__': 
    app = wx.App(False) 
    frame = MainFrame(parent=None) 
    frame.Show() 
    app.MainLoop() 

Что это говорит Python, чтобы сделать, это создать экземпляр класса wx.App. Параметр False сообщает wxPython, что он не должен перенаправлять stdout в новое окно. Затем мы создаем экземпляр вашего класса, MainFrame и устанавливаем его родительский номер None. После этого мы получим Show рамку. Если мы этого не сделаем, код все равно будет работать, но вы ничего не увидите. Наконец, мы вызываем функцию объекта MainLoop объекта, чтобы wxPython мог начать запуск и обработку событий.

Вот полный код:

# -*- coding: utf-8 -*- 

########################################################################### 
## Python code generated with wxFormBuilder (version Jun 17 2015) 
## http://www.wxformbuilder.org/ 
## 
## PLEASE DO "NOT" EDIT THIS FILE! 
########################################################################### 

import wx 
import wx.xrc 

########################################################################### 
## Class MainFrame 
########################################################################### 

class MainFrame (wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = u"Editor_SPED_LP", pos = wx.DefaultPosition, size = wx.Size(320,255), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL) 

     self.SetSizeHintsSz(wx.Size(320,255), wx.Size(320,255)) 

     bSizer1 = wx.BoxSizer(wx.VERTICAL) 

     self.m_textCtrl2 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_textCtrl2, 0, wx.ALL|wx.EXPAND, 5) 

     self.m_btn_abrirArq = wx.Button(self, wx.ID_ANY, u"Abrir arquivo...", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_btn_abrirArq, 0, wx.ALL, 5) 

     self.m_btn_editarTxt = wx.Button(self, wx.ID_ANY, u"Editar .txt", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_btn_editarTxt, 0, wx.ALL, 5) 

     self.m_gauge1 = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) 
     self.m_gauge1.SetValue(0) 
     bSizer1.Add(self.m_gauge1, 0, wx.ALL, 5) 

     self.m_btn_ajuda = wx.Button(self, wx.ID_ANY, u"Ajuda", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_btn_ajuda, 0, wx.ALL, 5) 

     self.m_staticText2 = wx.StaticText(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) 
     self.m_staticText2.Wrap(-1) 
     bSizer1.Add(self.m_staticText2, 0, wx.ALL, 5) 

     self.m_btn_sair = wx.Button(self, wx.ID_ANY, u"Sair", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.m_btn_sair, 0, wx.ALL, 5) 


     self.SetSizer(bSizer1) 
     self.Layout() 

     self.Centre(wx.BOTH) 

     # Connect Events 
     self.m_btn_abrirArq.Bind(wx.EVT_BUTTON, self.abrirArquivo) 
     self.m_btn_editarTxt.Bind(wx.EVT_BUTTON, self.editarTxt) 
     self.m_btn_ajuda.Bind(wx.EVT_BUTTON, self.janelaAjuda) 
     self.m_btn_sair.Bind(wx.EVT_BUTTON, self.sair) 

    def __del__(self): 
     pass 


    # Virtual event handlers, overide them in your derived class 
    def abrirArquivo(self, event): 
     event.Skip() 

    def editarTxt(self, event): 
     event.Skip() 

    def janelaAjuda(self, event): 
     event.Skip() 

    def sair(self, event): 
     event.Skip() 

if __name__ == '__main__': 
    app = wx.App(False) 
    frame = MainFrame(parent=None) 
    frame.Show() 
    app.MainLoop() 

 Смежные вопросы

  • Нет связанных вопросов^_^