【问题标题】:Bash script to run Python Tkinter GUI用于运行 Python Tkinter GUI 的 Bash 脚本
【发布时间】:2017-07-06 17:56:20
【问题描述】:

我正在尝试编写一个 Bash 脚本,以便我可以通过双击运行我的程序。该程序使用 tkinter,GUI 是我唯一需要查看的内容。我的bat文件如下:

python BudgetGUI.py &

这会运行代码并成功打印我在整个代码中拥有的任何打印语句,但它永远不会打开 GUI。它只是贯穿并立即关闭。

如何修改 bash 脚本以运行 GUI?

提前致谢!

编辑 mac 和 pc 的解决方案会很棒,虽然目前我在 PC 上。我在 Python3 中工作。

【问题讨论】:

    标签: python bash user-interface tkinter


    【解决方案1】:

    您需要添加对mainloop() 的呼叫。如果没有看到你的代码,我不能肯定地说,但可能你需要在底部添加root.mainloop()

    您不需要 bash 或 bat 文件。对于您的 Mac,只需添加一个 shebang 并使文件可执行。对于 Windows,添加 shebang 并将文件与 py.exe 关联。

    如果您想禁止命令行与 GUI 一起弹出,请使用 .pyw 扩展名重命名您的文件。

    【讨论】:

    • 所以...我遇到的一个问题是我的代码没有使用任何类。我对面向对象编程仍然很模糊,所以我只是强迫它在不使用类的情况下工作。如果我从 IDLE 运行脚本,GUI 和 shell 会很好地弹出。有什么解决方法吗?还是我把自己挖了一个洞?
    • 类与此无关
    • 哦。我想我很困惑。我的代码中没有“root.mainloop()”,但它仍然运行。如果我只是将其添加到脚本的末尾,我该如何实现您的建议?
    • IDLE 作弊并为您添加该行(排序)。在 IDLE 之外,您需要自己添加。
    • 正如我所说,您需要将文件与py.exe相关联。目前它与 IDLE 相关联。我认为您可以在“打开方式”对话框中进行设置。
    【解决方案2】:

    使使用 tkinter 制作的窗口远离 IDLE*

    如果你有

    root = Tk()
    

    放在最后

    root.mainloop()
    

    如果你有另一个名字,比如:

    window1 = Tk()
    

    然后,放在最后

    window1.mainloop()
    

    所以对于你给 Tk() istance 的任何名称

    一个小例子

    import tkinter as tk
    
    class Window:
        root = tk.Tk()
        label = tk.Label(root, text = "Ciao").pack()
    
    
    app = Window()
    app.root.mainloop()
    

    Python 2

    上面的代码适用于 python 3。 对于 python 2,您只需要更改第一行(Tkinter with T,not t)

    import Tkinter as tk
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2017-05-25
      • 2017-01-11
      • 2011-07-27
      • 1970-01-01
      • 2023-01-23
      相关资源
      最近更新 更多