Python3 - AppJar (tkinter wrapper) 改变按钮的功能

Python3 - AppJar (tkinter wrapper) change function of a button

所以基本上我有一个按钮,我想更改功能。按钮应该有 fnc HellWorld,如果我点击它 fnc GoodbyeWorld。

我的尝试:

from appJar import gui

app = gui()
app.setGeometry("300x300")


def HelloWorld(none):
    print("Hello World!")
    app.getButtonWidget("Button").config(command = GoodbyeWorld(none))

def GoodbyeWorld(none):
    print("Goodbye World!")
    app.getButtonWidget("Button").config(command = HelloWorld(none))

app.addButton("Button", HelloWorld, 1, 1)


app.go()

但是如果我像上面那样做,我的输出是:

Hello World!
Goodbye World!
Hello World!
Goodbye World!
Hello World!
Goodbye World!
Hello World!
Goodbye World!
Hello World!
Goodbye World!
....

然后我收到一些错误消息并以 RecursionError 结束。

我是不是做错了什么? (可能是..) Link 到 AppJar:http://appjar.info/

您正在混合分配函数的 appJar 方法和 tkinter 方法。你需要坚持使用一个,因为我知道 tkinter,我会建议 tkinter 方法:

from appJar import gui

app = gui()
app.setGeometry("300x300")


def HelloWorld():
    print("Hello World!")
    app.getButtonWidget("Button").config(command = GoodbyeWorld)

def GoodbyeWorld():
    print("Goodbye World!")
    app.getButtonWidget("Button").config(command = HelloWorld)

app.addButton("Button", None, 1, 1)
app.getButtonWidget("Button").config(command = HelloWorld) # set initial command

app.go()

您可能需要考虑一下为什么要重新分配该功能;这似乎很不寻常。对于您的示例,我只使用一个循环遍历数据的函数:

from appJar import gui
from itertools import cycle

to_print = cycle(["Hello World!", "Goodbye World!"])
app = gui()
app.setGeometry("300x300")

def output(btn):
    print(next(to_print))

app.addButton("Button", output, 1, 1)
app.go()