我想实现当我选择ComboBox
为anonymous
时,TextCtrl变灰的效果。我希望 TextCtrl 对象位于方法 set_name
的本地,我不希望 tc
成为整个类的成员。 也就是说,如何在不将 tc
更改为 self.tc
的情况下实现此目的?如果可能的话,我也不想将 select_user_type
和 set_name
这两个方法合并为一个。
import wx
class Example(wx.Frame):
def __init__(self, title):
super().__init__(None, title=title)
self.panel = wx.Panel(self)
self.initUI()
def initUI(self):
sizer = wx.GridBagSizer(2, 2)
self.select_user_type(sizer)
self.set_name(sizer)
self.panel.SetSizer(sizer)
sizer.Fit(self)
def select_user_type(self, sizer):
user_type = ['normal', 'anonymous']
combo = wx.ComboBox(self.panel, choices=user_type)
sizer.Add(combo, pos=(0, 1), span=(1, 2), flag=wx.TOP|wx.EXPAND, border=5)
combo.Bind(wx.EVT_COMBOBOX, self.on_user_type)
def set_name(self, sizer):
text1 = wx.StaticText(self.panel, label="Enter your name:")
sizer.Add(text1, pos=(1, 0), flag=wx.LEFT | wx.TOP | wx.BOTTOM, border=10)
tc1 = wx.TextCtrl(self.panel, style=wx.TE_CENTER, value="enter_name_here")
tc1.Bind(wx.EVT_TEXT, self.on_get_text)
sizer.Add(tc1, pos=(1, 1), flag=wx.TOP|wx.RIGHT|wx.BOTTOM|wx.EXPAND, border=5)
def on_get_text(self, e):
tc = e.GetEventObject()
print(tc.GetValue())
def on_user_type(self, e):
print("how to disable text ctrl when I select anonymous")
if __name__ == '__main__':
app = wx.App()
Example("Example").Show()
app.MainLoop()
最佳答案
如果您不想将引用直接保存在类实例上,您有几个选择
1.在实例之外保存引用,即
import wx
combo_tc_map = {}
class Example(wx.Frame):
self.panel = wx.Panel(self)
combobox = wx.ComboBox(self.panel)
textctrl = wx.TextCtrl(self.panel)
# references are saved in a module level dict
combo_tc_map[combobox] = textctrl
combobox.Bind(wx.EVT_COMBOBOX, self.on_user_type)
def on_user_type(self, e):
combo = e.GetEventObject()
tc = combo_tc_map[combo]
tc.Disable()
2. 或者,您可以直接在组合框上保存对 textctrl 的引用,即:
import wx
class Example(wx.Frame):
self.panel = wx.Panel(self)
combobox = wx.ComboBox(self.panel)
textctrl = wx.TextCtrl(self.panel)
# reference is saved directly to the ComboBox
combobox._linked_textctrl = textctrl
combobox.Bind(wx.EVT_COMBOBOX, self.on_user_type)
def on_user_type(self, e):
combo = e.GetEventObject()
tc = combo._linked_textctrl
tc.Disable()
关于python - 当我将组合框选择为特定值时,如何禁用文本ctrl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53817548/