【问题标题】:Python Tkinter Canvas Many create_window() Items Not Scrolling with ScrollbarPython Tkinter Canvas 许多 create_window() 项目不使用滚动条滚动
【发布时间】:2016-10-17 17:27:32
【问题描述】:

create_window 框架对象开始超出底部self.container 窗口时,为什么滚动条不启动?

我的理解是,如果使用 create_window 将小部件嵌入到画布上,它们是可滚动的。对于上下文,我不想创建一个滚动框架 - 将所有小部件放在一个框架中,使用 create_window 将该框架添加到画布 - 因为我打算在画布上移动这些框架对象并利用很多画布功能。根据Effbot您不能在小部件上绘制其他画布项目。,所以如果我有一个滚动框架,我将无法将小部件放在上面。 p>

那么如何滚动包含许多 create_window 对象的画布,或者,我在下面做错了什么?

import tkinter as tk

class Canvas_Scrollbar_CreateWindow(tk.Frame):

  def __init__(self, parent):
    tk.Frame.__init__(self, parent)
    self.parent = parent
    self.parent.columnconfigure(0, weight=1)
    self.grid_columnconfigure(0, weight=1)

    self.block_count = 0

    self.button = tk.Button(self, text='Add', command=self.addblock)
    self.button.grid(row=0, column=0, columnspan=2, sticky='new')

    self.container = tk.Frame(self)
    self.container.grid(row=1, column=0, sticky='nsew')

    self.canvas = tk.Canvas(self.container, width=200, height=450)
    self.scrollbar = tk.Scrollbar(self.container,
                                  orient='vertical',command=self.canvas.yview)
    self.canvas.config(yscrollcommand=self.scrollbar.set)
    self.canvas.grid(row=0, column=0, sticky='nsew')
    self.scrollbar.grid(row=0, column=1, sticky='nse')

    self.container.bind('<Configure>', self.handle_scroll)

  def addblock(self):
    self.block = tk.Frame(self.canvas, bd=1, relief='solid')
    self.block.columnconfigure(0, weight=1)
    self.canvas.create_window((0, (self.block_count*25)),
                              window=self.block, anchor="nw",
                              width=200, height=24)
    self.block_count += 1

  def handle_scroll(self, event):
    self.canvas.configure(scrollregion=self.canvas.bbox("all"))

root = tk.Tk()
app = Canvas_Scrollbar_CreateWindow(root)
app.grid(row=0, column=0, sticky='ew')
root.mainloop()

【问题讨论】:

  • 我不明白您关于在小部件上绘制对象的评论。您将其用作不使用框架的理由,但您正在绘制的小部件也是小部件,因此您仍然无法在它们之上绘制对象。

标签: python tkinter scrollbar tkinter-canvas


【解决方案1】:

向画布添加项目时必须重新配置scrollregion

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多