【发布时间】:2017-09-16 17:49:59
【问题描述】:
我想将画布中的标签一个接一个地排列。但展示位置并没有达到预期。
下面是在画布中插入标签的函数。但是 for 循环中的那些重叠。原因 - 一些标签的尺寸比另一个大。因此,我假设最大尺寸为 80 并分别进行展示位置。我想改变这种方法。相反,我希望标签一个接一个地相对放置。
def calculate(*args):
try:
ttk.Label(canvas, text="Result:").place(x=20, y=20)
ttk.Label(canvas, text="Topic:").place(x=20, y=80)
ttk.Label(canvas, textvariable=topic).place(x=200, y=80)
ttk.Label(canvas, text="Environment:").place(x=20, y=120)
ttk.Label(canvas, textvariable=environment).place(x=200, y=120)
ttk.Label(canvas, text="Event Results:").place(x=20, y=160)
inputValue=TextArea.get("1.0","end-1c")
len_max=0
result={}
for s in inputValue.splitlines():
data = MainInstance.searchWithPayload(s)
result[s]=data
if len(s+data) > len_max:
len_max = len(s+data)
i = 190
for key in result.keys():
print(key)
print(result[key])
ttk.Label(canvas, text=key+"\n\n"+result[key], wraplength=800).place(x=20,y = i)
i = i + 80
except ValueError:
pass
以下是集成画布小部件的代码。计算按钮调用计算函数。
ttk.Button(page2, text="Exit",command=page1.quit).grid(column=2, row=8)
ttk.Button(page2, text="Calculate", command=calculate).grid(column=3, row=8)
canvas = Canvas(root, width=900, height=universal_height)
canvas.grid(column=1, row=0)
root.mainloop()
其实问题分为两部分:
如何相对放置标签以停止重叠?
我尝试将滚动条添加到画布上。但是应用没有响应,也没有弹出。
添加滚动条的代码:
canvas=Canvas(root,bg='#FFFFFF',width=300,height=300,scrollregion=
(0,0,500,500))
hbar=Scrollbar(root,orient=HORIZONTAL)
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=canvas.xview)
vbar=Scrollbar(root,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
canvas.config(width=300,height=300)
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)
canvas.pack(side=LEFT,expand=True,fill=BOTH)
【问题讨论】:
-
你为什么使用
place?pack(在较小程度上,grid)旨在轻松地使小部件出现在行和/或列中。 -
使用网格,画布窗口的大小减小到其内容的大小。修复我想到的使用place的帧大小。
-
在我看来
.grid()在这里对你来说会好得多。是否完全有必要将所有内容放入canvas?
标签: python python-3.x canvas tkinter tk