我使用标签来显示数据。然而,我有这么多标签定位在彼此下面,我不能把它们全部放在同一个窗口上。我希望使用滚动条来滚动标签。然而,正如我所读到的,这并不是那么简单。据我所知,我的最佳选择是使用一个框架来收集我所有的标签,然后将框架插入到画布中,然后可以与滚动条并行使用,尽管我在这样做时遇到了困难。用于创建标签的函数是
def Tab(root, y):
    #Print the team
    playerTeam = Label(root, bg = "white", text = "Hello")
    playerTeam.config(height = 1, width = 13)
    playerTeam.place(x=20,y=y) 我试图结合我的函数添加以下代码
def onFrameConfigure(canvas):
    '''Reset the scroll region to encompass the inner frame'''
    canvas.configure(scrollregion=canvas.bbox("all"))
root = tk.Tk()
root.geometry("400x400")
canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")
frame = tk.Frame(canvas, background="#ffffff")
vsb = tk.Scrollbar(root, 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((4,4), window=frame, anchor="nw")
frame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas))
Tab(frame, 20)当运行时,会产生一个空白窗口。但是,当使用.grid而不是.place时,在Tab()中它工作正常,标签显示在窗口上。尽管当我多次调用Tab()时,标签会从窗口中消失,而向下滚动的功能也是不可用的。
如何使.place函数正确工作。第二,如何使滚动条正确工作。谢谢
发布于 2016-11-09 21:25:40
问题是,place不像其他几何学管理器那样工作--它不会改变其父级的大小。因此,即使您在框架中放置了一个大的(Ish)标签,该框架的默认大小仍然是一个像素宽和一个像素高。就在那儿,你就是看不见。
您可以通过给框架一个显式的宽度和高度来验证这一点(并且添加一个独特的颜色也有助于将其可视化):
frame.configure(width=100, height=100, background="bisque")来自地方正式文件
与许多其他几何管理器(如封隔器)不同,砂器不尝试操纵主窗口或从窗口的父窗口的几何形状(即不设置它们所请求的大小)。若要控制这些窗口的大小,请将其设置为提供配置选项的框架和画布。
我强烈建议您不要使用place。Tkinter的pack和grid几何管理器非常擅长布局小部件。如果您使用place,您必须自己做大量的计算,结果很可能无法适当调整大小或承受分辨率或字体大小的变化而不需要做大量的工作。
https://stackoverflow.com/questions/40515666
复制相似问题