python - 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()
我不知道这是否可能,但我希望框架适合画布并保持轮廓。我希望你能解决我的问题,并且可以帮助我!提前致谢。
解决方案
指定一个非负值,指示当控件具有输入焦点时要在控件外部绘制的高亮矩形的宽度。
所以,这并不是你想要的真正的“边界”。它是画布内绘图空间的一部分,当您用于window_create
绘制窗口时,该窗口的父级是画布,它在高亮之前开始,因此窗口在其上滑动。
正如@martineau所建议的那样,一种解决方案是0
通过指定来实现这一点,highlightthickness=0
并且正如您建议的那样,您需要围绕整个事物的“边框”,您可以创建一个容器框架并指定bd
参数,或者只bd
设置窗口window.config(bd=2)
。
推荐阅读
- node.js - Braintree dropin ui 显示卡号中插入子弹标记的垃圾字符
- java - 使用默认邮件客户端从 Java 发送电子邮件
- php - PHP 应用程序中的其他会话
- java - RecyclerView 需要很长时间才能从用户存储中填充大量视频
- excel - vba:如果单元格包含整个单词,则
- spring - 未定义约束时使用 Hibernate
- c# - C# 指定派生字段是从其原始类派生的
- django - 如何在django中将参数从视图传递到模板?
- html - 在桌面上设置图像大小,但在使用移动设备时调整大小
- ios - 使用 Xamarin Forms 的数据库和 API 调用无法在 iOS 后台运行