tkinter从主窗口打开python程序

时间:2020-07-19 04:21:42

标签: python tkinter

我很少使用python程序来创建html,例如insertMedia.py:它采用媒体文件的名称,将其放入html代码字符串中,然后将其写入输出文件。

insertMedia.py使用tkinter。我有一个带有“插入音频”和“插入视频”按钮的窗口。

insertMedia.py运作良好,没有问题。另外,我还有更多的“ makehtml”程序,每个程序都用于特定任务。

我想要一个主窗口,带有按钮,或者每个“ makehtml”程序的菜单项。

如何从主窗口打开并运行insertMedia.py?

我应该将所有“ makehtml”程序放入模块中并导入该模块吗?

来自Bryan Oakley的此代码(在stackoverflow中)打开一个新窗口。可以修改它以打开我的insertMedia.py吗?

import Tkinter as tk

def create_window():
    window = tk.Toplevel(root)

root = tk.Tk()
b = tk.Button(root, text="Create new window", command=create_window)
b.pack()

root.mainloop()

1 个答案:

答案 0 :(得分:1)

仅向您显示执行此操作的常用方法。

首先创建一个主文件,并将其内容保存在main.py中,例如进行检查:

main.py

import tkinter as tk
import Mod1

root = tk.Tk()


def callback():
    m1 = Mod1.Model(root, var='my_html')    
b = tk.Button(text='click me', command=callback)
b.grid(column=0,row=1)
root.mainloop()

然后,您将使用Toplevel和其中的内容创建另一个脚本,如下所示: Mod1.py

from __main__ import tk

class Model(tk.Toplevel):
    def __init__(self, master, var=None):
        tk.Toplevel.__init__(self, master)
        self.master = master
        self.configure(bg="red", width=300, height=300)

        b=tk.Button(self,text='print html', command=lambda:print(var))
        b.pack()

所以我在这里所做的是使用父类tk.Toplevel创建一个类的另一个脚本。这意味着该类成为其子类。我们将参数master wich设置为root,正如您在main.py中看到的那样,通过接口获取引用。

还请注意,我们导入了Mod1脚本,随后又通过Mod1.Model()引用了Model。您可以仅使用from Mod1 import Model导入模型,而不是导入Mod1。另外,我们从 main 脚本中导入了要使用的tk引用。

要像HTML字符串一样传递变量,您可以通过接口传递var。我将其设置为kwarg(关键字参数),以使类有必要初始化,而您必须删除=None,这是默认值。

这就是我们要做的所有工作。玩得开心!

对于更复杂的内容,您还可以编写包含键和值的字典。

main.py

import tkinter as tk
import Mod1

root = tk.Tk()


def callback():
    data_dict = {'key a':'value a','key b':'value b'} 
    m1 = Mod1.Model(root, dct= data_dict)    
b = tk.Button(text='click me', command=callback)
b.grid(column=0,row=1)
root.mainloop()

Mod1.py

from __main__ import tk

class Model(tk.Toplevel):
    def __init__(self, master, dct=None):
        tk.Toplevel.__init__(self, master)
        self.master = master
        self.configure(bg="red", width=300, height=300)

        b=tk.Button(self,text='print html', command=lambda:print(dct['key a']))
        b.pack()