所以,我第一次尝试使用tkinter在python上创建一个GUI,但是我遇到了Pack()
属性的问题。
到目前为止,我的GUI代码如下:
mainframe = tk.Tk()
mainframe.title("Hostname2IP")
mainframe.columnconfigure(1, weight=1)
mainframe.rowconfigure(1, weight=1)
SC= tk.scrolledtext.ScrolledText #shorten code a bit...
SC(master=mainframe, wrap=tk.WORD, width=5, height=15).grid(column=1, row=1, sticky=("NSEW"))
SC(master=mainframe, wrap=tk.WORD, width=5, height=15).grid(column=2, row=1, sticky=("NSEW"))
SC(master=mainframe, wrap=tk.WORD, width=5, height=15).grid(column=3, row=1, sticky=("NSEW"))
L1 = tk.Label(master=mainframe, text="Label1").grid(column=1, row=1, sticky="S")
L1 = tk.Label(master=mainframe, text="Label2").grid(column=2, row=1, sticky="S")
L1 = tk.Label(master=mainframe, text="Label3").grid(column=3, row=1, sticky="S")
tk.Button(master=mainframe, text="Open Targetslist", command=OpenTargetsButton).grid(column=1,row=3,sticky="W")
tk.Button(master=mainframe, text="Save Output", command=WriteOutButton).grid(column=2,row=3,sticky="E")
tk.Button(master=mainframe, text="Go", command=lambda: sequence(FilterList(file_path),\
GetIP_Mac(targethostlist),\
WriteOutput(Out_path))).\
grid(column=2, row=4, sticky="SE")
#bind key to a command
mainframe.bind('<Return>', lambda: sequence(FilterList(file_path),GetIP_Mac(targethostlist),WriteOutput(Out_path)))
mainframe.mainloop()
运行此显示:
正如你所看到的,标签是重叠的......而且一切都是不均匀和混乱的。
我现在的问题是,我无法将Pack()
应用于L1
,L2
,L3
或任何相似内容。
执行:L1.Pack(side="bottom")
告诉我“Theres no attribute'pack''。当我尝试删除那里的grid(...)
配置时,又给了我一个错误:
_tkinter.TclError:无法在里面使用几何管理器包。已经有网格管理的奴隶
那么......我在这里做错了什么?
编辑:如下面的答案所述,在上一个错误中,我不得不使用一个几何管理器。我在(仅)窗口容器上单独使用grid
,因此效果很好。实际上很简单。
答案 0 :(得分:1)
您在同一窗口中使用grid
和pack
。 Tkinter只能在窗口中处理一个几何管理器,因此决定是否需要grid
或pack
。
答案 1 :(得分:1)
两件事。首先,pack是小写的。我不知道这是不是一个错误,或者你的代码中是否有它。
现在主要的事情是:每个容器只有一种类型的几何管理器。
如果您将某物品装入容器中,则还必须打包直接进入该容器的所有其他物品。
这并不是说在整个tkinter程序中只能使用一种几何管理,只需按容器使用。
容器可以是:TopLevel(窗口),Frame,LabelFrame,PanedWindow或NoteBook。换句话说,您将其他小部件放入的任何小部件。
因此,如果您从主Tk实例,TopLevel开始,并将小部件放入其中,无论您使用哪种方法(网格/包/地方),您都必须使用该容器直接包含的所有小部件。
但是,如果其中一个窗口小部件本身就是一个容器,比如一个框架,则可以使用不同的几何管理方法来安排窗口小部件中的窗口小部件。