首页 > 解决方案 > Tkinter 修复 Frame 的大小以不与滚动条重叠 Canvas 边框

问题描述

我正在使用 tkinter 开发 GUI,但我遇到了问题。当我向我的应用程序添加滚动条时,画布上的框架与轮廓重叠(见图)

我的应用程序的屏幕截图

这是代码:

from tkinter import * 

window = Tk()
window.geometry("400x225")
scrollbar1 = Scrollbar(window, orient=VERTICAL)
canvas1 = Canvas(window, bg="#003333", yscrollcommand=scrollbar1.set)
frame1 = Frame(canvas1, bg="#003333")

scrollbar1.config(command=canvas1.yview)
scrollbar1.pack(side=RIGHT, fill=Y)
canvas1.pack(fill=BOTH, expand=True)
canvas1.create_window((0, 0), window=frame1, anchor="nw")

for x in range(20):
    string = "line " + str(x)
    label1 = Label(frame1, fg="white", bg="#003333", text=string, font=("Calibri Bold", 14))
    label1.pack(pady=5)

window.update()
canvas1.config(scrollregion=canvas1.bbox("all"))

window.mainloop()

我不知道这是否可能,但我希望框架适合画布并保持轮廓。我希望你能解决我的问题,并且可以帮助我!提前致谢。

标签: pythontkintercanvasscrollbarframe

解决方案


highlightthickness

指定一个非负值,指示当控件具有输入焦点时要在控件外部绘制的高亮矩形的宽度。

所以,这并不是你想要的真正的“边界”。它是画布内绘图空间的一部分,当您用于window_create绘制窗口时,该窗口的父级是画布,它在高亮之前开始,因此窗口在其上滑动。

正如@martineau所建议的那样,一种解决方案是0通过指定来实现这一点,highlightthickness=0并且正如您建议的那样,您需要围绕整个事物的“边框”,您可以创建一个容器框架并指定bd参数,或者只bd设置窗口window.config(bd=2)


推荐阅读