首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用嵌入在画布框架内的位置?

如何使用嵌入在画布框架内的位置?
EN

Stack Overflow用户
提问于 2016-11-09 20:41:20
回答 1查看 1K关注 0票数 2

我使用标签来显示数据。然而,我有这么多标签定位在彼此下面,我不能把它们全部放在同一个窗口上。我希望使用滚动条来滚动标签。然而,正如我所读到的,这并不是那么简单。据我所知,我的最佳选择是使用一个框架来收集我所有的标签,然后将框架插入到画布中,然后可以与滚动条并行使用,尽管我在这样做时遇到了困难。用于创建标签的函数是

代码语言:javascript
复制
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) 

我试图结合我的函数添加以下代码

代码语言:javascript
复制
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函数正确工作。第二,如何使滚动条正确工作。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-09 21:25:40

问题是,place不像其他几何学管理器那样工作--它不会改变其父级的大小。因此,即使您在框架中放置了一个大的(Ish)标签,该框架的默认大小仍然是一个像素宽和一个像素高。就在那儿,你就是看不见。

您可以通过给框架一个显式的宽度和高度来验证这一点(并且添加一个独特的颜色也有助于将其可视化):

代码语言:javascript
复制
frame.configure(width=100, height=100, background="bisque")

来自地方正式文件

与许多其他几何管理器(如封隔器)不同,砂器不尝试操纵主窗口或从窗口的父窗口的几何形状(即不设置它们所请求的大小)。若要控制这些窗口的大小,请将其设置为提供配置选项的框架和画布。

我强烈建议您不要使用place。Tkinter的packgrid几何管理器非常擅长布局小部件。如果您使用place,您必须自己做大量的计算,结果很可能无法适当调整大小或承受分辨率或字体大小的变化而不需要做大量的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40515666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档