【问题标题】:Must I creat a class attributes to get the input of TextCtrl, can it be local?我必须创建一个类属性来获取 TextCtrl 的输入,它可以是本地的吗?
【发布时间】:2019-05-17 05:01:26
【问题描述】:

这是原始代码,我在其中创建了wx.TextCtrl 属性self.tc1,绑定事件工作正常:

import wx


class Example(wx.Frame):

    def __init__(self, title):
        super().__init__(None, title=title)
        self.panel = wx.Panel(self)
        self.tc1 = None
        self.initUI()

    def initUI(self):
        sizer = wx.GridBagSizer(2, 2)
        self.set_name(sizer)
        self.panel.SetSizer(sizer)
        sizer.Fit(self)

    def set_name(self, sizer):
        text1 = wx.StaticText(self.panel, label="Enter your name:")
        sizer.Add(text1, pos=(0, 0), flag=wx.LEFT | wx.TOP | wx.BOTTOM, border=10)
        self.tc1 = wx.TextCtrl(self.panel, style=wx.TE_CENTER, value="enter_name_here")
        self.tc1.Bind(wx.EVT_TEXT, self.on_get_text)
        sizer.Add(self.tc1, pos=(0, 1), flag=wx.TOP|wx.RIGHT|wx.BOTTOM|wx.EXPAND, border=5)

    def on_get_text(self, e):
        print(self.tc1.GetValue())


if __name__ == '__main__':
    app = wx.App()
    Example("Example").Show()
    app.MainLoop()

如果我想让文本控件self.tc1 成为方法self.set_name 的局部变量怎么办,因为我不想用太多属性污染类。需要明确的是,如果我以这种方式更改方法 self.set_name,使 tc1 成为该方法的局部变量:

def set_name(self, sizer):
    text1 = wx.StaticText(self.panel, label="Enter your name:")
    sizer.Add(text1, pos=(0, 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=(0, 1), flag=wx.TOP|wx.RIGHT|wx.BOTTOM|wx.EXPAND, border=5)

如何修改 Bind 方法达到同样的效果?我的类中有太多的小部件,我真的不想让每一个都成为类属性。 p>

【问题讨论】:

  • 这个变量不是类属性,而是类成员。

标签: python user-interface wxwidgets wxpython


【解决方案1】:

传递给处理程序的 EVT_TEXT 事件包含对其绑定的对象的引用。要获取该对象,请调用GetEventObject()

def on_get_text(self, event):
    tc1 = event.GetEventObject()
    print(tc1.GetValue())

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2013-04-03
  • 2011-05-10
  • 2011-06-29
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
相关资源
最近更新 更多