Почему StringVar().set(LocalScript) получает идентификатор функции вместо возвращаемого значения

#python #function #tkinter

#python #функция #tkinter

Вопрос:

Я использую Python 3.4 с Tkinter. Я пытаюсь заставить StringVar() метку постоянно обновляться из скрипта и обновлять экран новыми данными (я собираюсь начать со времени). Но сначала я просто пытаюсь получить метку для отображения выходных данных функции:

 import time
from datetime import datetime

def localScript():
    return str(datetime.now().time())
  

Я присваиваю свой StringVar() тип возвращаемого значения этой функции как таковой:

 textVar1 = StringVar()
textVar1.set(str(localScript))
  

И это мой вывод: <function localScript at 0x02325f60>

Я новичок в Python, поэтому я не совсем понимаю его версию scope. localScript определяется глобально, тогда как назначение выполняется внутри класса (в том же .py файле, конечно). Возможно, это проблема области видимости.

Ответ №1:

В Python вам нужно поместить (...) после имени функции, чтобы вызвать ее:

 textVar1.set(localScript())
  

Смотрите демонстрацию ниже:

 >>> def func():
...     return 'hi'
...
>>> func  # Below is a string representation of the function object itself
<function func at 0x01B4EBB0>
>>> func()  # The () calls func.  Below is the return value of the function
'hi'
>>>
  

Вот ссылка на определение / вызов функций в Python.

Комментарии:

1. Так что тогда это было просто returnign __repr__ функции. Я идиот