0

我一直在寻找解决此问题的方法,但似乎找不到可行的答案。

我有以下代码可以在单击按钮时打开另一个 tkinter 脚本:

# Program to Open on Button Click
def tkinter1():
    ret = os.system('python C:\filepath\new_script.py"')
    if ret:
        # record updated, reload data
        treeview_preview()

b1 = Button(master, text="New Window", command=tkinter1)

我面临的问题是我希望在单击按钮时关闭当前窗口,并且只保持新窗口打开。

我知道这是可能的。我有这个带有许多不同窗口的实例,我似乎被卡住了。不幸的是,我对测试版软件的不同部分有一个完全不同的脚本,而我能够成功运行所有这些的唯一方法就是如上所述访问它们。

我尝试if ret: exit()在最后使用该命令,结果相同。我的窗户一遍又一遍地打开。

看起来很简单,但是我编程tkinter脚本的时间太长了。(我还有很多东西要学)

感谢所有帮助。

4

1 回答 1

0

您可以使用master.withdraw(). 我用几行代码让你的代码可以运行。好的,可以说您的固定主要代码是这样的:

import tkinter as tk
from tkinter import *
from seccond import *
from multiprocessing import Process
import os
def main():
    master = tk.Tk()
    # Program to Open on Button Click
    def tkinter1():
        master.withdraw()
        master.destroy()
        ret = Process(target=treeview_preview())
        ret.start()
        #if ret:
        #    # record updated, reload data
        #    treeview_preview()
        #commented out bc i don't know what it is
    b1 = Button(master, text="New Window", command=tkinter1)
    b1.pack()
    master.mainloop()
if __name__ == '__main__':
    main()

与主代码位于同一文件夹中的辅助代码名称 seccond.py 被称为外部函数,但也被称为单独的进程。

import tkinter as tk
def treeview_preview():
    root = tk.Tk()
    S = tk.Scrollbar(root)
    T = tk.Text(root, height=4, width=50)
    S.pack(side=tk.RIGHT, fill=tk.Y)
    T.pack(side=tk.LEFT, fill=tk.Y)
    S.config(command=T.yview)
    T.config(yscrollcommand=S.set)
    quote = """this is the seccond window."""
    T.insert(tk.END, quote)
    tk.mainloop()

该代码将删除窗口,但不会删除终端框,因为它将用于第二个脚本。

于 2020-12-17T21:00:47.743 回答