【问题标题】:Modualrize Python program with appJar GUI使用 appJar GUI 模块化 Python 程序
【发布时间】:2020-07-16 13:05:54
【问题描述】:

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

【问题讨论】:

  • 创建def press(app) 并发送app 作为参数。使用不作为参数发送的变量是不好的。
  • 始终将代码、数据和错误消息作为文本而不是图像。 Python 无法加载图像来运行代码。
  • 至于我将press 放在单独的文件中是错误的想法。在单独的文件中应该是可以在其他项目中使用的相当新的小部件或类。而且您必须将函数放在单独的文件中,然后您必须将所有值作为参数获取,并且不应使用未知变量。

标签: python appjar


【解决方案1】:

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

模块/方法.py

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

ma​​in.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])

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

模块/方法.py

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

ma​​in.py

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

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

模块/方法.py

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

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

ma​​in.py

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

【讨论】:

  • 谢谢,我没想过将 app 作为变量传递。
  • 在 main.py 的第一个示例中,您有两个拼写错误:必须是 from modules import methods,在 def press(): 中必须是 methods.display(app)
  • 我更正了拼写错误 - 都是因为您将代码作为图像,而我不得不手动编写:)
猜你喜欢
  • 2017-08-05
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多