我尝试在框架中添加滚动条,但没有成功。我已经在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,以及一个滚动条(因为在整个代码中,我有很多小部件,而所有小部件都没有出现在窗口中)。
通过创建对象“界面”,窗口中没有窗口小部件,并且可以看到滚动条,但无法滚动窗口。
答案 0 :(得分:0)
当您使用pack
或grid
时,默认行为是包含控件增加或缩小以适合其所有子元素。 place
没有这种行为,因此当您使用place
将小部件放置在框架中时,框架将保留其请求的大小。您没有为框架设置尺寸,因此默认为1x1像素。
使用place
很少是一个好主意。不仅由于这个原因,还因为您必须做所有确保布局适合窗口,响应能力强并且可以在分辨率和字体不同的计算机上工作的工作。
如果您切换为使用grid
或pack
,则框架会自动增长以适合其中包含的所有小部件。