python обновление холста - надоедает фла sh при рисовании - PullRequest
1 голос
/ 29 мая 2020

Я создаю GUI, используя python 3.7. Интерфейс включает холст и полосу прокрутки.

Я использую update_idletasks (), чтобы определить область прокрутки для холста. Я получаю нужный виджет, но это приводит к тому, что холст выдает раздражающий fla sh при вызове. Я не нашел никакой документации или справки, описывающей и решающей эту проблему. Я надеюсь, что кто-то нашел способ обойти это.

Я включил небольшой пример, который можно запустить и воспроизвести проблему

#! /Library/Frameworks/Python.framework/Versions/3.7/bin/python3

import tkinter as tk 
from tkinter import *

class App(tk.Frame) :

   def __init__(self,root=None) :

      master = root
      self.master = master

      Frame.__init__(self,master)
      master.title("TITLE")
      canvas = self.CreateCanvas(master)
      canvas.grid(row=0,column=0)

   def CreateCanvas(self,parent) :
      # Create a frame for the canvas and scrollbar(s).
      canvasframe = Frame(parent,relief='ridge',bd=2)
      canvasframe.grid(row=1,column=0,sticky="news",padx=10,pady=10)

      label=Label(canvasframe,text="Example")
      label.grid(row=0,column=0,sticky=E+W,pady=10)

      # Add a canvas in the frame.
      canvas = tk.Canvas(canvasframe)
      canvas.grid(row=1, column=0,sticky='nesw')

      # Create a vertical scrollbar linked to the canvas.
      vsbar = tk.Scrollbar(canvasframe, orient=tk.VERTICAL, command=canvas.yview)
      vsbar.grid(row=1, column=1, sticky=tk.NS)
      canvas.configure(yscrollcommand=vsbar.set)

      # Create a frame on the canvas to contain the buttons.
      buttons = tk.Frame(canvas, bd=2)

      # Make some arbitrary  buttons
      for x in range(10) :
         for y in range(10) :
            text = "(" + str(x) + "," + str(y) + ")"
            button=Button(buttons,text=text)
            button.grid(row=y,column=x)

      # Create canvas window to hold them
      canvas.create_window((0,0), window=buttons, anchor=tk.NW)

      canvas.update_idletasks()  # Needed to make bbox info available.
      bbox = canvas.bbox(tk.ALL)  # Get bounding box of canvas with Buttons.      

      #Number of rows, and columns to display
      rows = 5
      cols = 10

      # Define the scrollable region as entire canvas with only the desired
      # number of rows and columns displayed.
      w, h = bbox[2]-bbox[1], bbox[3]-bbox[1]

      dw, dh = int((w/cols * cols)), int((h/rows))
      canvas.configure(scrollregion=bbox, width=dw, height=dh)

      return(canvasframe)

root = tk.Tk()
app = App(root)
app.mainloop()

...