用GUI界面生成一个窗体

import tkinter as tkwin = tk.Tk()win.geometry("600x400+800+400")win.title("tkWindow代码生成器")# 申明字符变量title_var = tk.StringVar()w_var = tk.StringVar()h_var = tk.StringVar()# 标题labTitle = tk.Label(win)labTitle["text"] = "标题"labTitle.place(x=10,y=10)txtTitle = tk.Entry(win,textvariable = title_var)txtTitle.place(x=60,y=10)# 宽度x高度labWH = tk.Label(win)labWH["text"] = "宽x高"labWH.place(x=10,y=40)txtW = tk.Entry(win,textvariable = w_var)txtW["width"] = 5txtW.place(x=60,y=40)txtH = tk.Entry(win,textvariable = h_var)txtH["width"] = 5txtH.place(x=130,y=40)def run_Window():global new_winglobal title_varglobal h_varglobal w_varnew_win = tk.Tk()new_win.geometry(w_var.get() + "x" + h_var.get())new_win.title(title_var.get())new_win.mainloop()# 运行按钮btnRun = tk.Button(win)btnRun["text"] = "运行"btnRun["width"] = 20btnRun["height"] = 3btnRun["command"] = run_WindowbtnRun.place(x=10,y=70)def close_Window():new_win.destroy()# 停止按钮btnRun = tk.Button(win)btnRun["text"] = "停止"btnRun["width"] = 20btnRun["height"] = 3btnRun["command"] = close_WindowbtnRun.place(x=10,y=140)win.mainloop()
上面的实现是直接基于事件处理代码中重新创建一个窗体,然后用mainloop()执行,用destroy()进行关闭。
改进
实现代码的显示,以及只允许一个窗体实例运行。
import tkinter as tkwin = tk.Tk()win.geometry("600x400+800+400")win.title("tkWindow代码生成器")# 申明字符变量title_var = tk.StringVar()w_var = tk.StringVar()h_var = tk.StringVar()code_var = tk.StringVar()# 标题labTitle = tk.Label(win)labTitle["text"] = "标题"labTitle.place(x=10,y=10)txtTitle = tk.Entry(win,textvariable = title_var)txtTitle.place(x=60,y=10)# 宽度x高度labWH = tk.Label(win)labWH["text"] = "宽x高"labWH.place(x=10,y=40)txtW = tk.Entry(win,textvariable = w_var)txtW["width"] = 5txtW.place(x=60,y=40)txtH = tk.Entry(win,textvariable = h_var)txtH["width"] = 5txtH.place(x=130,y=40)has_Run = False #是否已经有一个窗体实例运行def run_Window():global new_winglobal title_varglobal h_varglobal w_varglobal code_varglobal has_Runif has_Run == False:new_win = tk.Tk()new_win.geometry(w_var.get() + "x" + h_var.get())new_win.title(title_var.get())# 生成代码并显示code_str = "import tkinter as tk\n\n"code_str += "win = tk.Tk()\n"code_str += "win.geometry('" + w_var.get() + "x" + h_var.get()+ "')\n"code_str += "win.title('" + title_var.get() + "')\n\n"code_str += "win.mainloop()\n"codeText.delete(1.0,"end")codeText.insert("insert",code_str)has_Run = Truenew_win.mainloop()else:has_Run = Falsenew_win.destroy()run_Window() # 自己调用自己是否可行?没有Goto啊# 运行按钮btnRun = tk.Button(win)btnRun["text"] = "运行"btnRun["width"] = 10btnRun["height"] = 1btnRun["command"] = run_WindowbtnRun.place(x=220,y=10)def close_Window():new_win.destroy()# 停止按钮btnRun = tk.Button(win)btnRun["text"] = "停止"btnRun["width"] = 10btnRun["height"] = 1btnRun["command"] = close_WindowbtnRun.place(x=300,y=10)# 代码区codeText =tk.Text(win)codeText["width"]=80codeText["height"]=21codeText.place(x=10,y=80)win.mainloop()
改进:各个参数默认值+top\left值的支持

import tkinter as tkwin = tk.Tk()win.geometry("600x400+800+400")win.title("tkWindow代码生成器")# 申明字符变量title_var = tk.StringVar()w_var = tk.StringVar()h_var = tk.StringVar()top_var = tk.StringVar()left_var = tk.StringVar()code_var = tk.StringVar()# 标题labTitle = tk.Label(win)labTitle["text"] = "标题"labTitle.place(x=10,y=10)txtTitle = tk.Entry(win,textvariable = title_var)txtTitle.insert(0,"我的窗体") # 默认窗体名称txtTitle.place(x=60,y=10)# 宽度x高度labWH = tk.Label(win)labWH["text"] = "宽x高"labWH.place(x=10,y=40)txtW = tk.Entry(win,textvariable = w_var)txtW["width"] = 5txtW.insert(0,"400") #默认窗体宽度txtW.place(x=60,y=40)txtH = tk.Entry(win,textvariable = h_var)txtH["width"] = 5txtH.insert(0,"300") #默认窗体高度txtH.place(x=130,y=40)# +top+leftlabTL = tk.Label(win)labTL["text"] = "顶+左"labTL.place(x=170,y=40)txtLeft = tk.Entry(win,textvariable = left_var)txtLeft["width"] = 5txtLeft.insert(0,"600") #默认窗体Left值txtLeft.place(x=260,y=40)txtTop = tk.Entry(win,textvariable = top_var)txtTop["width"] = 5txtTop.insert(0,"400") #默认窗体Top值txtTop.place(x=330,y=40)has_Run = False #是否已经有一个窗体实例运行# 运行窗体实例def run_Window():global new_winglobal title_varglobal h_varglobal w_varglobal top_varglobal left_varglobal code_varglobal has_Runif has_Run == False:new_win = tk.Tk()new_win.geometry(w_var.get() + "x" + h_var.get() + "+" + left_var.get() + "+" + top_var.get())new_win.title(title_var.get())# 生成代码并显示code_str = "import tkinter as tk\n\n"code_str += "win = tk.Tk()\n"code_str += "win.geometry('" + w_var.get() + "x" + h_var.get() + "+" + left_var.get() + "+" + top_var.get() + "')\n"code_str += "win.title('" + title_var.get() + "')\n\n"code_str += "win.mainloop()\n"codeText.delete(1.0,"end")codeText.insert("insert",code_str)has_Run = Truenew_win.mainloop()else:has_Run = Falsenew_win.destroy()run_Window() # 自己调用自己是否可行?没有Goto啊# 运行按钮btnRun = tk.Button(win)btnRun["text"] = "运行"btnRun["width"] = 10btnRun["height"] = 1btnRun["command"] = run_WindowbtnRun.place(x=220,y=10)def close_Window():new_win.destroy()# 停止按钮btnRun = tk.Button(win)btnRun["text"] = "停止"btnRun["width"] = 10btnRun["height"] = 1btnRun["command"] = close_WindowbtnRun.place(x=300,y=10)# 代码区codeText =tk.Text(win)codeText["width"]=80codeText["height"]=21codeText.place(x=10,y=80)win.mainloop()
