【问题标题】:I've created a GUI using wxPython and the functions aren't executed when I run my app我已经使用 wxPython 创建了一个 GUI,并且在我运行我的应用程序时没有执行这些函数
【发布时间】:2015-10-03 01:11:37
【问题描述】:

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

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


我正在使用 Python“2.7.9”

我可以运行 import wx

而我的 wx.__version__ 是“3.0.2.0”


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

是继承概念的问题吗?

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

gui.py 代码:

# -*- 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()

app1.py 代码:

# -*- 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() 

【问题讨论】:

  • 您对__del__ 的定义正在发出警告信号。为什么要定义__del__
  • 当我执行app1.py时,当我按下按钮时会发生很多事情,我在控制台中得到文本,一个文件选择器窗口,一个消息框......确定这不是wx安装有问题吗?
  • @Oddthinking gui.py 是使用 wxFormBuilder 默认 python 配置创建的...
  • @adrianus 有没有办法检查?我已经从 www.wxpython.org 安装了 wxPython3.0-win32-3.0.2.0-py27
  • 您可以运行import wx; print wx.__version__ 进行第一次检查吗?

标签: python function inheritance button wxpython


【解决方案1】:

日志:

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

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

import wx
print wx.__version__

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

我很高兴你能解决它复制到一个普通的新文件夹,可能发生了一些导入或文件名混淆,因为它现在似乎可以单独使用这两个文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-07
    • 2016-01-22
    • 1970-01-01
    • 2021-05-04
    • 2023-04-10
    • 2020-01-16
    • 2013-10-24
    • 2022-08-15
    相关资源
    最近更新 更多