es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

WxPython importa widgets de otras clases.

Soy principiante en WxPython y he intentado experimentar dividiendo el código para que esté organizado y se vea más limpio. Lo he intentado con un código simple pero no funciona. ¿Alguien puede echarme una mano?

El código que he intentado:

import wx

class text_ctrl (wx.Panel):
    def init(self, parent):
        wx.Panel.init(self, parent = parent)
        text = wx.TextCtrl(self, pos = (100, 100))

class Window(wx.Frame):
    def init(self):
        super().init(parent = None, title = "Learn - Tab TextBox")

        panel = wx.Panel()
        text_ctrl(self)
        self.Show()

if name == "main":
    app = wx.App()
    window = Window()
    app.MainLoop()

Problema: La caja de texto no aparece (que se supone que es el punto principal).

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay un par de problemas con el código que podrían estar causando que el cuadro de texto no aparezca:

    1. La clase text_ctrl no se está instanciando correctamente en la clase Window. En lugar de text_ctrl(self), debería ser text_ctrl(panel) para que el cuadro de texto se añada como un widget secundario del panel.
    2. Hay un error ortográfico en el método __init__ de la clase text_ctrl. El nombre del método debería ser __init__ (con dos guiones bajos a cada lado) en lugar de __init.

    Aquí tienes una versión corregida del código:

    import wx
    
    class text_ctrl(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent=parent)
            text = wx.TextCtrl(self, pos=(100, 100))
    
    class Window(wx.Frame):
        def __init__(self):
            super().__init__(parent=None, title="Aprender - Tab de Cuadro de Texto")
    
            panel = wx.Panel(self)
            text_ctrl(panel)
    
            self.Show()
    
    if __name__ == "__main__":
        app = wx.App()
        window = Window()
        app.MainLoop()
    

    Con estos cambios, el cuadro de texto debería aparecer ahora en el panel.

Comments are closed.