尝试在框架上添加滚动条时出现问题

时间:2019-07-16 13:51:32

标签: python-3.x tkinter

我尝试在框架中添加滚动条,但没有成功。我已经在stackoverflow上阅读了有关此主题的帖子,并尝试了许多建议,但它们对我不起作用。

我已经尝试过了。

import tkinter as tk 

class Interface(tk.Frame):
    def __init__(self, root, **kwargs):
        tk.Frame.__init__(self, root, width=768, height=576, **kwargs)
        #self.pack(fill=tk.BOTH, expand=True)


        self.canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")
        self.frame = tk.Frame(self.canvas, background="#ffffff")
        self.vsb = tk.Scrollbar(root, orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)

        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)
        self.canvas.create_window((4,4), window=self.frame, anchor="nw", 
                                  tags="self.frame")

        self.frame.bind("<Configure>", self.onFrameConfigure)
        self.populate()

        def command():
            global parameters
            temp=[entry.get() for entry in self.entries]
            parameters=temp 

        self.bouton_Executer = tk.Button(self.frame, text="Exécuter le programme", fg="red", command=command)
        self.bouton_Executer.place(x=400  ,y= 840)


    def populate(self):        
        self.all_entries= []

        label=tk.Label(self.frame, text="a").place(x = 20, y = 60)
        entry=tk.Entry(self.frame)
        entry.place(x = 60, y = 60)
        self.all_entries.append(entry)

        label=tk.Label(self.frame, text="b").place(x = 20, y = 80)
        entry=tk.Entry(self.frame)
        entry.place(x = 60, y = 80)
        self.all_entries.append(entry)


    def onFrameConfigure(self, event):
            #'''Reset the scroll region to encompass the inner frame'''
            self.canvas.configure(scrollregion=self.canvas.bbox("all")

root = tk.Tk()  
interface = Interface(root)
interface.mainloop()
interface.destroy()

我想有一个窗口,其中包含两个小部件a和b,以及一个滚动条(因为在整个代码中,我有很多小部件,而所有小部件都没有出现在窗口中)。

通过创建对象“界面”,窗口中没有窗口小部件,并且可以看到滚动条,但无法滚动窗口。

1 个答案:

答案 0 :(得分:0)

当您使用packgrid时,默认行为是包含控件增加或缩小以适合其所有子元素。 place没有这种行为,因此当您使用place将小部件放置在框架中时,框架将保留其请求的大小。您没有为框架设置尺寸,因此默认为1x1像素。

使用place很少是一个好主意。不仅由于这个原因,还因为您必须做所有确保布局适合窗口,响应能力强并且可以在分辨率和字体不同的计算机上工作的工作。

如果您切换为使用gridpack,则框架会自动增长以适合其中包含的所有小部件。