簡體   English   中英

Python Tkinter畫布許多create_window()項無法使用滾動條滾動

[英]Python Tkinter Canvas Many create_window() Items Not Scrolling with Scrollbar

為什么當create_window框架對象開始超過底部self.container窗口時,滾動條為什么不啟動?

我的理解是,如果小部件使用create_window嵌入在畫布上,則它們是可滾動的。 對於上下文,我不想創建滾動框架-將所有小部件放在框架中,使用create_window將該框架添加到畫布上-因為我打算在畫布上四處移動這些框架對象並利用很多畫布能力。 根據Effbot的介紹您不能在小部件頂部繪制其他畫布項目。 ,因此,如果我有滾動框架,則無法在其上放置小部件。

那么,如何滾動包含許多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()

tkinter create_window滾動條

將項目添加到畫布時,必須重新配置scrollregion

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM