我是python的新手,但打包管理器存在问题。我的目标是创建以下布局:
BUTTON1 BUTTON2 LABEL1
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
我尝试了以下操作:
BUTTON1.pack(side=tk.TOP, anchor=tk.W)
BUTTON2.pack(side=tk.TOP, anchor=tk.W,padx=5)
LABEL1.pack(side=tk.TOP, anchor=tk.W,padx=5)
CANVAS.pack(side=tk.BOTTOM,fill=tk.BOTH, expand=1)
请给我以下内容:
BUTTON1
BUTTON2
LABEL1
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
此:
BUTTON1.pack(side=tk.LEFT, anchor=tk.N)
BUTTON2.pack(side=tk.LEFT, anchor=tk.N,padx=5)
LABEL1.pack(side=tk.LEFT, anchor=tk.N,padx=5)
CANVAS.pack(side=tk.BOTTOM,fill=tk.BOTH, expand=1)
给我这个:
BUTTON1 BUTTON2 LABEL1 <--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
这很接近,但仍然不是我想要的:
BUTTON1.pack(side=tk.LEFT, anchor=tk.N)
BUTTON2.pack(side=tk.LEFT, anchor=tk.N,padx=5)
LABEL1.pack(side=tk.TOP, anchor=tk.W,padx=5)
CANVAS.pack(side=tk.BOTTOM,fill=tk.BOTH, expand=1)
给我这个:
BUTTON1 BUTTON2 LABEL1
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
<--------------CANVAS EXPANDED -------------->
如何做到?
答案 0 :(得分:1)
解决了Ethan的提示问题:
BUTTON1.grid(row=0,column=0,sticky=tk.NSEW)
BUTTON2.grid(row=0,column=1,sticky=tk.NSEW)
LABEL1.grid(row=0,column=2,sticky=tk.NSEW)
CANVAS.grid(row=1,column=0, sticky=tk.NSEW, columnspan=4)
FRAME.grid_columnconfigure(3,weight=1)
FRAME.grid_rowconfigure(1,weight=1)
使用此解决方案,除位置row = 1和column = 3外,每一行和每一列将具有小部件的大小(默认值weight = 0)。第3列和第1列的权重均为1。使用此设置,此“单元”将扩展到框架的最大值,使用画布,此“ CANVAS”也将扩展到最大,因为画布使用的是“单元”(1 | 3)。 >
答案 1 :(得分:0)
您无法按照自己的方式做自己想做的事-pack
并非以这种方式工作。
最简单,最直接的解决方案是为带有按钮的行使用框架。然后,您可以将按钮和标签从左到右包装在该框架内,然后将框架包装在顶部,并在其下方放置画布。
有关包如何工作的规范定义可以在tcl / tk官方手册页的The packer algorithm部分中找到。
示例:
import tkinter as tk
root = tk.Tk()
button_frame = tk.Frame(root)
BUTTON1 = tk.Button(button_frame, text="Button 1")
BUTTON2 = tk.Button(button_frame, text="Button 2")
LABEL1 = tk.Label(button_frame, text="Label 1")
CANVAS = tk.Canvas(root, background="bisque")
BUTTON1.pack(side="left")
BUTTON2.pack(side="left")
LABEL1.pack(side="left")
button_frame.pack(side="top", fill="x")
CANVAS.pack(side="top", fill="both", expand=True)
root.mainloop()