Skip to main content
 首页 » 编程设计

python之我使用 wxPython 创建了一个 GUI,当我运行我的应用程序时,这些函数没有执行

2025年05月04日22linjiqin

我正在使用 python 2.7,我正在使用 wxPython 为特定的文本编辑器创建一个 GUI。 我已经创建了这两个脚本来运行我的程序:gui.py 和 app1.py 并且我将它们放在一个文件夹中。

问题是,一旦我运行 app1.py,它就会完美地打开 GUI。 但是当我按下按钮时,我插入到 app1.py 中的命令不会执行。甚至在终端中也不会像简单的 print () 一样执行。


我正在使用 Python“2.7.9”

我可以运行import wx

我的wx.__version__是“3.0.2.0”


那么,我的代码有什么问题?

是继承概念问题吗?

我应该使用 super() 来解决这个问题吗?如果是这样,我应该如何使用它?

The gui.py code:

# -*- 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,231 ), style = wx.DEFAULT_FRAME_STYLE|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL ) 
 
        self.SetSizeHintsSz( wx.Size( -1,-1 ), wx.Size( -1,-1 ) ) 
 
        bSizer1 = wx.BoxSizer( wx.VERTICAL ) 
 
        self.m_textBox = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_LEFT|wx.TE_READONLY ) 
        bSizer1.Add( self.m_textBox, 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_textoProgresso = wx.StaticText( self, wx.ID_ANY, u"Aguardando arquivo..", wx.Point( -1,-1 ), wx.DefaultSize, wx.ALIGN_CENTRE ) 
        self.m_textoProgresso.Wrap( -1 ) 
        bSizer1.Add( self.m_textoProgresso, 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.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 ) 
 
    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() 

The app1.py code:

# -*- coding: utf-8 -*-  
 
#importing wx files 
import wx 
#import the newly created GUI file 
import gui 
 
#inherit from the MainFrame created in wxFormBuilder and create MyFrame 
class MyFrame(gui.MainFrame): 
    #constructor 
    def __init__(self, parent): 
        #initialize parent class 
        gui.MainFrame.__init__(self, parent) 
 
    #handlers for MyFrame_MainFrame events 
    def abrirArquivo(self, event): 
        try: 
            #abrir fileDialog box 
            openFileDialog = wx.FileDialog(self, "Open", "", "", "Text files (*.txt)|*.txt", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) 
            openFileDialog.ShowModal() 
            #salvar o caminho para o arquivo 
            filepath = openFileDialog.GetPath() 
            #alterar a textbox para "arquivo encontrado" 
 
            TextCtrl.SetValue(self, "teste") 
            StaticText.SetValue(self, u"Arquivo encontrado..") 
        except Exception: 
            print "erro_abrir_arquivo" 
 
    def editarTxt(self, event): 
        try: 
            #editar texto 
            dial = wx.MessageDialog(None, "TESTE", 'Ajuda - Editor SPED', wx.OK) 
            dial.ShowModal() 
            dial.Destroy() 
        except Exception: 
            print "erro_editar_txt" 
 
    def janelaAjuda( self, event): 
        try: 
            #mostrar janela de ajuda 
            dial = wx.MessageDialog(None, "'1 - Apertar o botao 'escolher arquivo' \n2 - Selecionar o .txt do SPED da L.P.\n3 - Aguarde o processamento..\n4 - O arquivo editado sera salvo na mesma pasta do arquivo selecionado\n5 - Fim'", 'Ajuda - Editor SPED', wx.OK) 
            dial.ShowModal() 
            dial.Destroy() 
        except Exception: 
            print "erro_jan_ajuda" 
 
# run the app and render-it continuously 
class MyApp(wx.App): 
    def OnInit(self): 
        self.frame = MyFrame(None) 
        self.SetTopWindow(self.frame) 
        self.frame.Show(True) 
        print("wxApp criado com sucesso.") 
        return True 
if __name__ == "__main__": 
    # do not redirect stdout to the gui 
    app = MyApp(redirect=False) 
    # render gui continuously 
    app.MainLoop()  

请您参考如下方法:

对于日志:

正如我在评论中提到的,我将这两个文件复制到一个空文件夹中,当我单击它们时,按钮看起来功能齐全,我在控制台、文件选择器窗口和消息框中看到文本。

要开始检查 wx 的任何安装问题,请检查

import wx 
print wx.__version__ 

如果它返回您的 wxPython 安装的版本号。

我很高兴您可以通过复制到一个普通的新文件夹来解决这个问题,也许发生了一些导入或文件名混淆,因为它现在似乎可以单独处理这两个文件。