2017-07-19 136 views
0

我目前正試圖在畫布上實現滾動條,因爲我瞭解到我無法在框架上立即執行此操作。我可以讓它出現,但我實際上無法使它工作。當談到python和tkinter時,我仍然是一個初學者,以前的帖子對我來說並沒有太多幫助。這裏是我的代碼(我接受建議對什麼事我已經做了一個被認爲是不好的做法一樣):畫布上的滾動條

from tkinter import * 

class myApp(): 
    def __init__(self,root): 
     myApp.f2=Frame(root) 
     myApp.f2.pack() 
     myApp.canv=Canvas(self.f2) 
     myApp.canv.pack() 
     myApp.f1=Frame(self.canv) 
     myApp.f1.pack(side=LEFT, fill=BOTH, expand=TRUE) 
     myApp.scroll=Scrollbar(self.f1,orient=VERTICAL, 
     command=myApp.canv.yview) 
     myApp.scroll.grid(row=0,column=6) 
     myApp.canv.config(yscrollcommand=myApp.scroll.set) 

我必須使用電網的部件的其餘部分,我還沒有包括這裏。

+0

你試圖讓滾動條成爲畫布的孫子(通過框架'f1'),這是奇怪的 - 通常是一個滾動條和它的滾動小部件是兄弟姐妹。另外,您通常不會通過'.grid()'或'.pack()'將畫布添加到畫布上 - 您必須使用'.add_window()'創建實際上可以滾動的子項。 – jasonharper

回答

0

我真的不明白綁定是如何工作的,但這裏是我用於Toplevel中的滾動條的代碼,它不是來自我,但我不記得我在哪裏找到它(我認爲這是在stackoverflow上,你應該搜索更多,我相信你會找到一些東西)。它應該工作,但你可以滾動只有當你用鼠標懸停它吧,雖然

Toplevel = tk.Toplevel(self) 

    #create canvas to make a scrollbar 
    canvas = tk.Canvas(Toplevel, borderwidth=0) 
    #create frame which will contains your widgets 
    frame = tk.Frame(canvas) 

    #create and pack your vsb to the Toplevel and link it to the canvas yview 
    vsb = tk.Scrollbar(Toplevel, orient="vertical", command=canvas.yview) 
    canvas.configure(yscrollcommand=vsb.set) 
    vsb.pack(side="right", fill="y") 
    canvas.pack(side="left", fill="both", expand=True) 
    canvas.create_window((5,5), window=frame, anchor="nw") 


    #i don't understand this line 
    frame.bind("<Configure>", lambda event, canvas=canvas: canvas.configure(scrollregion=canvas.bbox("all"))) 

    #add your widgets to the frame 
    ... 

PS:不要使用from tkinter import *你可以(會)有名稱衝突,使用import tkinterimport tkinter as tk

編輯:this question是我的來源。