Heim  >  Fragen und Antworten  >  Hauptteil

Was ist der Unterschied zwischen Funktionen, die durch def in Python mit Klammern und ohne Klammern definiert werden?

Der Ablauf ist wie folgt:

import tkinter as tk
window = tk.Tk()
window.title("我的程序")
window.geometry('400x300')
var = tk.StringVar()
lable = tk.Label(window,textvariable = var,font = (('微软雅黑'),12))
lable.pack()
on_hit = True
def run():
    global on_hit
    if on_hit == True:
        on_hit = False
        var.set('you hit me')
    else:
        on_hit = True
        var.set('')
button = tk.Button(window,text = 'hit',font = (('微软雅黑'),12),command = run)
button.pack()
window.mainloop()

Der Effekt dieses Programms besteht darin, dass es eine Schaltfläche gibt, die angezeigt wird. Drücken Sie sie erneut und sie verschwindet.
Warum wird die Schaltfläche als Schaltfläche = tk.Button(Fenster, Text) geschrieben = 'Fragen und Antworten generieren',font = ( ('Microsoft Yahei'),12), command = run()), beim Aufrufen der Funktion Klammern hinzufügen und die Taste erneut drücken. Es wird immer angezeigt, dass Sie mich getroffen haben, und der Inhalt im Label oben wird sich nicht mehr ändern?

我想大声告诉你我想大声告诉你2686 Tage vor960

Antworte allen(2)Ich werde antworten

  • phpcn_u1582

    phpcn_u15822017-06-12 09:29:41

    button = tk.Button(window,text = 'hit',font = (('微软雅黑'),12),command = run)

    这句,只是将run这个函数本身让button保存下来,在button被点击后会自动调用(相当于点击后才运行run())。
    如果改成

    button = tk.Button(window,text = 'hit',font = (('微软雅黑'),12),command = run())

    解释器会在看到这句的时候立即调用一次run(),然后把调用的返回值让button保存下来,现在button被点击后调用的就是这个返回值(这个例子下就是None)。

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-06-12 09:29:41

    command有两种方式调用:
    b = Button(... command = button)
    b = Button(... command = lambda: button('hey'))

    你想要用()调用的话可以用lambda写:
    button = tk.Button(window,text = '生成题目和答案',font = (('微软雅黑'),12),command =lambda:run())

    Antwort
    0
  • StornierenAntwort