Как вызвать переменную из одной функции в другую? - PullRequest
2 голосов
/ 14 июня 2019

В wxPython я пытаюсь определить переменную из одной функции (в экземпляре) для вызова в другую (не в экземпляре, но все еще в классе)

Я видел, как люди решали проблемы других людей в своих ситуациях, и я пробовал другие люди, но это просто не работает для меня.

class NamePrompts(wx.Frame):
    def __init__(self, *args, **kw):
        super(NamePrompts, self).__init__(*args, **kw)

        panl = wx.Panel(self)

        textboxtest = wx.TextCtrl(panl) # defining textboxtest as a text box
        textboxtest.Bind(wx.EVT_TEXT, self.OnKeyTyped)

        read = wx.Button(panl, label="Print", pos=(0, 25))
        read.Bind(wx.EVT_BUTTON, self.PrintText)

    def PrintText(self, event):
        typedtext = event.textboxtest.GetString() # attempting to call the same textbox here
        wx.StaticText(wx.Panel(self), label=typedtext, pos=(25, 25))

if __name__ == '__main__':
    app = wx.App()
    frm = NamePrompts(None, title='Basketball Game')
    frm.SetSize(0,0,1920,1040)
    frm.Show()
    app.MainLoop()

Я получаю эту ошибку:

AttributeError: 'CommandEvent' object has no attribute 'textboxtest'
Traceback (most recent call last):
  File "textboxtest.py", line 19, in PrintText
    typedtest = event.textboxtest.GetString() # attempting to call the same text box here

1 Ответ

1 голос
/ 14 июня 2019

Добро пожаловать в StackOverflow.

Самый простой способ достичь желаемого - использовать self при создании wx.TextCtrl, чтобы он был доступен из других методов, кроме __init__, а затем напрямую получить доступ к значению wx.TextCtrl из других методов.

import wx

class NamePrompts(wx.Frame):
    def __init__(self, *args, **kw):
        super(NamePrompts, self).__init__(*args, **kw)

        panl = wx.Panel(self)

        self.textboxtest = wx.TextCtrl(panl) # defining textboxtest as a text box
        #self.textboxtest.Bind(wx.EVT_TEXT, self.OnKeyTyped)

        read = wx.Button(panl, label="Print", pos=(0, 25))
        read.Bind(wx.EVT_BUTTON, self.PrintText)

    def PrintText(self, event):
        typedtext = self.textboxtest.GetValue() # attempting to call the same textbox here
        print(typedtext)
        wx.StaticText(wx.Panel(self), label=typedtext, pos=(25, 25))

if __name__ == '__main__':
    app = wx.App()
    frm = NamePrompts(None, title='Basketball Game')
    frm.SetSize(50,50,300,300)
    frm.Show()
    app.MainLoop()

Тем не менее, если вы хотите узнать, как передавать пользовательские переменные с событием, вы можете проверить использование лямбда-функций и частичного модуля .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...