gpt4 book ai didi

Python Tkinter Canvas 的边框与 `create_window' 创建的窗口重叠

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:35 24 4
gpt4 key购买 nike

我正在使用 tkinter 制作滚动 Canvas 。当我通过create_window链接创建一个窗口,其框架比 Canvas 大,窗口将与 Canvas 的边框重叠。

import Tkinter as tk


class ScrollCanvas(object):
"""A widget to show table in frame"""
def __init__(self, parent=None):
self.parent = parent
self.frame = tk.Frame(self.parent, bd=3,
relief=tk.GROOVE)
self.frame.pack(fill=tk.BOTH, expand=1)

self.frame.grid_rowconfigure(0, weight=1)
self.frame.grid_columnconfigure(0, weight=1)

self.xscrollbar = tk.Scrollbar(self.frame, orient=tk.HORIZONTAL)
self.yscrollbar = tk.Scrollbar(self.frame, orient=tk.VERTICAL)
self.canvas = tk.Canvas(self.frame, bg='#006666',
bd=10, relief=tk.GROOVE,
xscrollcommand=self.xscrollbar.set,
yscrollcommand=self.yscrollbar.set)

self.xscrollbar.grid(row=1, column=0, sticky=tk.W+tk.E)
self.yscrollbar.grid(row=0, column=1, sticky=tk.N+tk.S)
self.canvas.grid(row=0, column=0, sticky=tk.W+tk.E+tk.N+tk.S)

self.xscrollbar.config(command=self.canvas.xview)
self.yscrollbar.config(command=self.canvas.yview)

self.table = tk.Frame(self.canvas, bd=5, relief=tk.SOLID,
width=400, height=200)

self.canvas.create_window(0, 0, anchor=tk.CENTER, window=self.table)
self.canvas.update_idletasks()
self.canvas.config(scrollregion=self.canvas.bbox(tk.ALL))


def main():
app = tk.Tk()
app.geometry('400x300')
frame = tk.Frame(app, width=50, height=50)
frame.propagate(0)
frame.pack(fill=tk.BOTH, expand=1)
mytable = ScrollCanvas(parent=frame)
app.mainloop()

main()

结果是这样的:(红框)

enter image description here

有人知道如何解决这个问题吗?

最佳答案

奇怪的是, Canvas 边框是绘图空间的一部分,因此 Canvas 上绘制的任何内容都有可能与边框重叠。

我使用的解决方案是从 Canvas 上删除边框,然后将 Canvas 放入有边框的框架内。从视觉上看,它看起来是一样的,但由于可见边框属于另一个小部件,因此 Canvas 中的项目不可能与其重叠。

关于Python Tkinter Canvas 的边框与 `create_window' 创建的窗口重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com