2017-08-24 111 views
0

我正在为我的个人使用创建一个YouTube管理器,并且它的表现非常好,直到我用UI敲击砖墙。我的画布不让我滚动python

下面的代码:

class Application(ttk.Frame): 
def __init__(self, master=None): 
    super().__init__(master) 
    self.pack() 
    self.create_widgets() 

def create_widgets(self): 
    nb = ttk.Notebook(self) 

    page1 = ttk.Frame(nb, width= 300) 
    #page1 = ttk.Frame(self, width= 300) 

    nb.add(page1, text='One') 
    #page1.grid() 

    nb.grid() 

    frames = {} 
    labels = {} 
    lk_btns = {} 
    cmt_btns = {} 
    mk_wch_btns = {} 
    dwld_btns = {} 

    i = 0 

    scrollbar = ttk.Scrollbar(page1) 
    #scrollbar.grid(row = 0,column = 1,sticky = "ns") 
    scrollbar.pack(side = "right",fill = "y") 

    listbox = tk.Canvas(page1,yscrollcommand = scrollbar.set,) 

    #listbox.grid(row = 0,column = 0,sticky = "nsew") 
    listbox.pack(side = "left",fill = "both") 

    for v in test.getLatestVids(): 
     frm = ttk.Frame(listbox) 
     frm.grid(row=i, column=1,sticky = "E") 

     lb = ttk.Label(frm, text=convert65536(v["snippet"]["title"])) 
     lb.grid(row = 0,rowspan = 4,column=0,sticky = "E") 
     labels[i] = lb 

     download = ttk.Button(frm, text="Download") 
     download.grid(row = 1,column=1,sticky = "W") 
     dwld_btns[i] = download 

     mwatched = ttk.Button(frm, text="Mark Watched") 
     mwatched.grid(row = 2,column=1,sticky = "W") 
     mk_wch_btns[i] = mwatched 

     like = ttk.Button(frm, text="Like") 
     like.grid(row = 1,column=2,sticky = "W") 
     lk_btns[i] = like 

     comment = ttk.Button(frm, text="Comment") 
     comment.grid(row = 2,column=2,sticky = "W") 
     cmt_btns[i] = comment 

     frames[i] = frm 
     i += 1 

    scrollbar.config(command=listbox.yview) 
    listbox.configure(scrollregion=(-400, -400, 400, 400)) 

    #self.quit = tk.Button(self, text="QUIT", fg="red", 
    #      command=root.destroy) 

root = tk.Tk() 
app = Application(master=root) 
app.mainloop() 

PS1:在 “convert65536” 的方法是在YouTube的标题处理的表情符号的方法。我发现它here

PS2:“test.getLatestVids”方法是我做的一个外部方法,它返回一个字典列表。

这里的问题是代码认为有很多空间,而不是使用滚动条代替。我试图通过限制“page1”的大小来完成这项工作,但我没有这么做。

下面是一些截图:

In fullscreen

Seeing the entire list thanks to multiple desktops

回答

0

项目添加到画布packplacegrid不会滚动。在画布上滚动的唯一东西是添加了create_window的窗口。

最常见的解决方案是将一个帧添加到画布,并在框架内部然后packplace,或grid窗口小部件。见http://stackoverflow.com/a/3092341/7432

如果您要创建垂直的文本和小部件列表,更简单的解决方案是使用文本小部件,该小部件允许您使用window_create方法嵌入小部件。