python - Enable a button in the parent wx.Frame
问题描述
I need help to enable a button in the parent wx.Frame, here i have an example of two classed first class mainFrame has two buttons first one m_buttonlogin to launch the second wx.Frame class instance loginFrame and another disabled button. what i need to do is upon successful login in the child Frame the disabled button turns enabled in the main frame.
# -*- 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 = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
bSizer1 = wx.BoxSizer( wx.VERTICAL )
self.m_buttonlogin = wx.Button( self, wx.ID_ANY, u"Login", wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer1.Add( self.m_buttonlogin, 0, wx.ALL, 5 )
self.m_buttondisabled = wx.Button( self, wx.ID_ANY, u"Dsiabled", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_buttondisabled.Enable( False )
bSizer1.Add( self.m_buttondisabled, 0, wx.ALL, 5 )
self.SetSizer( bSizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.m_buttonlogin.Bind( wx.EVT_BUTTON, self.OnLogin )
def __del__( self ):
pass
# Virtual event handlers, overide them in your derived class
def OnLogin( self, event ):
loginFrame.Show(self)
event.Skip()
###########################################################################
## Class loginFrame
###########################################################################
class loginFrame ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
bSizer2 = wx.BoxSizer( wx.VERTICAL )
self.m_textCtrlusername = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer2.Add( self.m_textCtrlusername, 0, wx.ALL, 5 )
self.m_textCtrlpassword = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer2.Add( self.m_textCtrlpassword, 0, wx.ALL, 5 )
self.m_buttonOK = wx.Button( self, wx.ID_ANY, u"OK", wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer2.Add( self.m_buttonOK, 0, wx.ALL, 5 )
self.SetSizer( bSizer2 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.m_buttonOK.Bind( wx.EVT_BUTTON, self.OnOK )
def __del__( self ):
pass
# Virtual event handlers, overide them in your derived class
def OnOK( self, event ):
# Enable "m_buttondisabled" button in the mainFrame
event.Skip()
Thanks.
解决方案
An simple way to achieve this is to make use of the parent
attribute in the loginFrame
.
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 = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
bSizer1 = wx.BoxSizer( wx.VERTICAL )
self.m_buttonlogin = wx.Button( self, wx.ID_ANY, u"Login", wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer1.Add( self.m_buttonlogin, 0, wx.ALL, 5 )
self.m_buttondisabled = wx.Button( self, wx.ID_ANY, u"Disabled", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_buttondisabled.Enable( False )
bSizer1.Add( self.m_buttondisabled, 0, wx.ALL, 5 )
self.SetSizer( bSizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.m_buttonlogin.Bind( wx.EVT_BUTTON, self.OnLogin )
def __del__( self ):
pass
# Virtual event handlers, overide them in your derived class
def OnLogin( self, event ):
loginFrame(self).Show()
event.Skip()
###########################################################################
## Class loginFrame
###########################################################################
class loginFrame ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.parent = parent
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
bSizer2 = wx.BoxSizer( wx.VERTICAL )
self.m_textCtrlusername = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer2.Add( self.m_textCtrlusername, 0, wx.ALL, 5 )
self.m_textCtrlpassword = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer2.Add( self.m_textCtrlpassword, 0, wx.ALL, 5 )
self.m_buttonOK = wx.Button( self, wx.ID_ANY, u"OK", wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer2.Add( self.m_buttonOK, 0, wx.ALL, 5 )
self.SetSizer( bSizer2 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.m_buttonOK.Bind( wx.EVT_BUTTON, self.OnOK )
def __del__( self ):
pass
# Virtual event handlers, overide them in your derived class
def OnOK( self, event ):
# Enable "m_buttondisabled" button in the mainFrame
self.parent.m_buttondisabled.Enable( True )
self.parent.m_buttonlogin.Enable( False)
event.Skip()
app = wx.App()
frame = mainFrame(None)
frame.Show()
app.MainLoop()
推荐阅读
- reactjs - 有没有办法从克隆的仓库中禁用 Prettier?
- python - 尝试在 Python 3 中创建不重复的随机变量列表,但无法正常工作
- javascript - 在 Firebase 可调用函数中抛出 HttpsError() 是否会导致实例被丢弃(并因此导致冷启动)?
- wordpress - 如何解决此错误“致命错误:无法重新声明检索密码()”
- graphql - GraphQL 查询 - 编写模式和解析器
- spring-boot - 升级到 Java 10,但在 Docker/Spring-Boot/Maven 设置中出现“致命错误编译:无效目标版本:10”
- xpages - 阻止转发或回复电子邮件
- javascript - 在 WSL2 上运行 Puppeteer 控制 Windows 上的 Chrome
- r - 用户在 Shiny 应用程序中选择不同的数据框和列表
- java - 将数据集划分为 n 个分区