无法将滚动条添加到画布小部件

问题描述

在iMac上使用Python 2.7.16。 Python和此论坛的新手。 我有一个具有画布小部件的应用程序,用户可以在其上进行绘制,我想向其中添加滚动条。在过去的两天里,我一直在努力,但没有运气。我看过很多例子,但是我什么也做不了。

我该怎么做?

下面是一个屏幕截图,并将源代码简化为基本代码。 在屏幕快照中,外窗上的滚动条。我想要绘图画布上的滚动条,它是黑色区域。

谢谢。

This what my code example produce.

这是我的代码示例产生的。

This is what I want with the canvas having scroll bars.

Now it looks like this

    #!/usr/bin/python
    
    import Tkinter as tk
    
    WINDOW_SIZE='950x650'
    
    
      ##########
      # Size for canvas draring area
      ##########
    
    MAX_X = 600
    MAX_Y = 600
    
    
    window = tk.Tk()
    window.title("Cluster")
    window.geometry(WINDOW_SIZE)
    
    # Create a frame parent for the canvas and scrollbar(s).
    p_frame = tk.Frame(window)
    p_frame.grid(row=3,column=0,sticky=tk.NW) 
    
    
    Canvas_frame = tk.Frame()
    Canvas = tk.Canvas(window,bg="black",height = MAX_Y,width = MAX_X)
    
    Canvas.pack();

    coord = 10,50,240,210
    arc = Canvas.create_arc(coord,start=0,extent=150,fill="red")
    
    line = Canvas.create_line(0,20,300,400,fill="dark violet")
    
    lbl = tk.Label(window,width=15,height=5,borderwidth=2,relief="groove",anchor="center",justify="center",text="fasfdasf") 
    lbl.pack()

    
    # Create a vertical scrollbar linked to the canvas.
    vsbar = tk.Scrollbar(p_frame,orient=tk.VERTICAL,command=Canvas.yview)
    vsbar.grid(row=0,column=1,sticky=tk.NS)
    Canvas.configure(yscrollcommand=vsbar.set)
    
    # Create a horizontal scrollbar linked to the canvas.
    hsbar = tk.Scrollbar(p_frame,orient=tk.HORIZONTAL,command=Canvas.xview)
    hsbar.grid(row=1,sticky=tk.EW)
    Canvas.configure(xscrollcommand=hsbar.set)
    
    
    # Start Tk's event loop
    window.mainloop()

解决方法

您不应将滚动条放在画布内。通常,画布和滚动条应共享一个公共父级。

如果希望滚动条看起来像在画布内一样,请创建一个带有边框的框架,然后将画布和滚动条放在框架内。