我很少使用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()
答案 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()