使用 appJar GUI 模块化 Python 程序

Modualrize Python program with appJar GUI

如何模块化 appJar 应用程序?当我尝试使用 example code 并将 press() 函数移动到自己的文件中时,此函数不知道 app 变量。我想您最好看看下面的图片 - 如果没有,我会更新问题!

对我来说,将 press() 放在单独的文件中不是个好主意。我宁愿将 press() 保留在当前文件中,它可以使用其他文件中的函数 - 但此文件应将所有值作为参数

modules/methods.py

def display(app):
    print("User:", app.entry("Username"), "Pass:", app.entry("Password"))

main.py

from appJar import gui 
from modules import methods

def press():
    methods.display(app)

with gui("Login Window", "400x200", bg='orange', font={'size':18}) as app:
    app.label("Welcome to appJar", bg='blue', fg='orange')
    app.entry("Username", label=True, focus=True)
    app.entry("Password", label=True, secret=True)
    app.buttons(["Submit", "Cancel"], [press, app.stop])

或者事件的其他函数应该只从小部件中获取值

modules/methods.py

def display(username, password):
    print("User:", username, "Pass:", password)

main.py

def press():
    methods.display(app.entry("Username"), app.entry("Password"))

如果你真的想要 press() 在其他文件中,那么它应该得到 app 作为参数

modules/methods.py

def press(app):
    print("User:", app.entry("Username"), "Pass:", app.entry("Password"))

但是你必须使用 lambda:methods.press(app) 来分配给带参数的按钮函数。

main.py

app.buttons(["Submit", "Cancel"], [lambda:methods.press(app), app.stop])