1
我正在使用tkinter制作滚动的画布。当我通过create_window
链接创建一个窗口大于画布的框架时,窗口将与画布边框重叠。Python Tkinter Canvas的边框与`create_window'创建的窗口重叠
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()
的结果是这样的:(红色框)
有谁知道如何解决这一问题?
谢谢你的回答。把画布放在一个框架上确实可以避免这个问题。但为什么画布边框是绘画空间的一部分? – xyz
@xyz:为什么?我不知道。这个决定可能是在20年前做出的。 –