os.system("python tkWindow.py") 在python文件中运行另一个外部python脚本文件。
image.png

  1. import tkinter as tk
  2. import os
  3. win = tk.Tk()
  4. win.geometry('400x300+600+400')
  5. win.title('在.py中运行其他.py脚本文件')
  6. def btnRun_click():
  7. os.system("python tkWindow.py") # 运行另一个python脚本文件
  8. # 运行按钮
  9. btnRun = tk.Button(win)
  10. btnRun["text"] = "运行tkWindow.py"
  11. btnRun["width"] = 30
  12. btnRun["height"] = 3
  13. btnRun["command"] = btnRun_click
  14. btnRun.place(x=10,y=10)
  15. win.mainloop()

整个流程是可行的,而且在主进程中的按钮按下后持续处于按下状态,被执行的脚本的窗体处于类似模态窗体的状态。等被执行进程关闭后,源进程的窗体按钮恢复原样。

基于PythonGUI的类多窗体应用思路

其实,基于这种实现,已经可以制作类似于多窗体的应用,当然窗体之间是无法通信和传递数据的。

扩展思考

os.system其实执行的是CMD的命令,所以像start之类的命令应该也可以支持,而利用start可以实现网站、文件夹以及文件的打开。

实际测试

确实可以执行CMD的start命令,用来打开文件】文件夹和网站

  1. import tkinter as tk
  2. import os
  3. win = tk.Tk()
  4. win.geometry('400x300+600+400')
  5. win.title('在.py中运行CMD的start命令')
  6. def btnRun_click():
  7. os.system("start https://www.baidu.com/") # 用系统浏览器打开网址
  8. # 运行按钮
  9. btnRun = tk.Button(win)
  10. btnRun["text"] = "打开百度"
  11. btnRun["width"] = 30
  12. btnRun["height"] = 3
  13. btnRun["command"] = btnRun_click
  14. btnRun.place(x=10,y=10)
  15. win.mainloop()

以下是打开文件夹和文件

  1. os.system("start G:\【Python刻意练习100】\\001\\") # 打开本地文件夹
  2. os.system("start G:\【Python刻意练习100】\\001\\001.可视化窗体辅助代码生成.mp4") # 打开本地文件夹

其中注意,文件夹必须以反斜杠结尾,并且除磁盘盘符之后紧跟的那个反斜杠不需要转义外,其他路径中的反斜杠都要再加一个反斜杠进行转义。

system的另一种引入方式

image.png