创建后按钮消失

2024-10-03 17:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在每次事件发生时以编程方式创建一个按钮。我接到了pubsub的电话,按钮被创建了,但随后立即消失(面板上有点闪烁)。你知道吗

class panel_one (wx.Panel) :

def __init__(self, parent) :
    """Constructor"""
    super().__init__(parent)
    pub.subscribe(self.my_listener, "panel_listener")
    self.btns = 1
    self.new_btn = ''
    wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size (1280, 150),
                       style=wx.TAB_TRAVERSAL)

    self.sbSizer4 = wx.StaticBoxSizer (wx.StaticBox (self, wx.ID_ANY, u"label"), wx.HORIZONTAL)

    self.m_button24 = wx.Button (self.sbSizer4.GetStaticBox (), wx.ID_ANY, u"Tech", wx.DefaultPosition,
                                 wx.Size (100, 100), 0)
    self.m_button24.Bind(wx.EVT_BUTTON, self.ShowTech)
    self.sbSizer4.Add (self.m_button24, 0, wx.ALL, 5)

    self.m_button241 = wx.Button (self.sbSizer4.GetStaticBox (), wx.ID_ANY, u"Info", wx.DefaultPosition,
                                  wx.Size (100, 100), 0)
    self.m_button241.Bind(wx.EVT_BUTTON, self.ShowInfo)
    self.sbSizer4.Add (self.m_button241, 0, wx.ALL, 5)

    self.SetSizer (self.sbSizer4)
    self.Layout ()

def my_listener(self, message):
    self.ButtonPost(message)

def ButtonPost(self, label) :
    self.new_btn = wx.Button (self.sbSizer4.GetStaticBox (), wx.ID_ANY, label, wx.DefaultPosition,
                                  wx.Size (100, 100))
    self.new_btn.Show()
    self.btns += 1
    self.sbSizer4.Add(self.new_btn, 0, wx.CENTER|wx.ALL, 5)
    self.sbSizer4.Layout()

我试图刷新和/或更新面板和/或框架。你知道吗

有什么想法吗?你知道吗

编辑: 所以我做了一件事,用另一个按钮手动创建它们,尝试调用侦听器和/或它调用的函数。结果: Panel

class panel_three (wx.Panel) :
# TECH
def __init__(self, parent) :
    super().__init__(parent)
    pub.subscribe(self.my_listener, "switch_panel")
    pub.subscribe(self.my_listener1, "new_call")
    wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=(0, 150), size=wx.Size (1280, 874),
                       style=wx.TAB_TRAVERSAL)
    self.bSizer10 = wx.BoxSizer(wx.HORIZONTAL)
    self.testtrigger = wx.Button(self, wx.ID_ANY, u"MANUAL", wx.DefaultPosition,
                                 wx.Size (100, 50), 0)
    self.bSizer10.Add(self.testtrigger, 0, wx.ALL, 5)
    self.testtrigger.Bind(wx.EVT_BUTTON, lambda event: self.my_listener1('manually\ncreated'))
    self.SetSizer(self.bSizer10)
    self.Layout()

def ButtonPost(self, label) :
    new_btn = wx.Button(self, wx.ID_ANY, label, wx.DefaultPosition,
                                 wx.Size (100, 50), 0)
    self.bSizer10.Add(new_btn, 0, wx.ALL, 5)
    self.bSizer10.Layout()
    self.Update()

def my_listener(self, message):
    self.SwitchPanel(message)

def my_listener1(self, message):
    self.ButtonPost(message)

def SwitchPanel(self, which):
    if which == 'TECH':
        self.Show()
    else:
        self.Hide()

Tags: selfidmessagenewsizeinitmydef
1条回答
网友
1楼 · 发布于 2024-10-03 17:28:17

重复一下:

当我按下a帧中的一个按钮时,它会触发一个事件,在这个事件中,它应该在B帧中创建一个具有特定名称的按钮,通过pypubsub进行通信。你知道吗

问题:

事件被触发,pypubsub事件从A帧发布,在B帧接收,按钮被创建并立即消失。你知道吗

在由按钮触发的处理程序中调用了到pypubsub的过帐,例如:

def handler(self, event):
    # do some stuff
    self.postnewbutton(self, arg1, arg2)
    # do some other stuff

解决方案:

我可以直接创建另一个绑定到按钮,并使函数以其他方式获取参数,或者在线程处理程序中为它创建一个新线程。你知道吗

我现在意识到我的设计有多简陋了。你知道吗

相关问题 更多 >