查找除已使用的锚点之外的另一个锚点的位置

2023-12-06

我创建了一个代码来显示我的问题。它看起来像这样:

userNameID = tkinter.Label(root, text="Name/ID")
userNameID.place(x=640, y=320, anchor="e")

userNameID = tkinter.Label(root, text="Password")
userNameID.place(x=640, y=360, anchor="e")

entButton = tkinter.Button(root, text="Enter", command=enterPrint)
entButton.place(x=640, y=400, anchor="w")

问题是我在中心的一个尺寸上对齐了一些文本,在另一侧对齐了一个按钮。我想知道文本的西北锚点的位置,以确保所有内容距中心的距离相同并且仍然对齐。


grid() and pack()“精确”足以满足大多数需求。您只需要学习如何充分正确地使用这些几何管理器。事实上使用place()几乎从来都不是你所需要的。它有它的用途,但对于一般 GUI 设置来说它不是一个很好的选择。更新代码也很难管理。

更新:回答您在评论中的问题:

行配置意味着你因为权重而将每一行设置为 1 像素?我知道我可以在整个过程中绘制一个网格,但我不知道我的程序有多少行、多少列。所以我找不到中心。

权重用于告诉特定的行或列应相对于同一网格/容器内它们周围的其他行和列以一定的比例调整大小。默认权重为零。当我们将权重设置为 1 时,该行或列将随窗口以均匀的速率调整大小。

以这个示例代码为例:

import tkinter as tk

root=tk.Tk()

center_frame = tk.Frame(root)
center_frame.grid(row=1, column=1, sticky='nsew')

tk.Label(center_frame, text='Name/ID').grid(row=0, column=0)
tk.Label(center_frame, text='Password').grid(row=1, column=0)
tk.Button(center_frame, text='Enter').grid(row=2, column=1)

root.mainloop()

Results:

enter image description here enter image description here

在上面的示例中,您将看到当您调整窗口大小时,小部件不会移动。这是因为我们没有指示 tkinter 允许移动任何行或列。

如果我们将此权重添加到程序中root.rowconfigure(0, weight=1):

然后我们得到这样的效果:

enter image description here

接下来添加这个root.rowconfigure(2, weight=1):

enter image description here

接下来添加这个root.columnconfigure(0, weight=1):

enter image description here

接下来添加这个root.columnconfigure(2, weight=1):

enter image description here

正如您在上面的图像中看到的那样,根据您设置了权重的行和列,行和列将相应地调整大小。我们通过上面的代码实现的是调整第 0 行和第 2 行的大小以及调整第 0 行和第 2 列的大小。row 1 column 1不会调整大小。所以这意味着我们放置在row 1 column 1位置不会调整大小,而是保持其与边框的相对位置。因为我们在row 1 column 1位置,然后是我们有效制作的框架内的所有小部件row 1 column 1中心。

行和列的数量与您指定的数量一样多。 Tkinter 将根据您所说的内容自动调整总行数和总列数。除此之外,它还会使没有任何内容的行和列的大小为零。这意味着只有包含内容(小部件)的行和列才会真正影响网格的大小。

假设我们有 3 行和 3 列。根据我们填充的方式,它会改变显示内容的大小。

在此示例中,您在任何地方看到X显示我们在下面的行和列中放置了一些内容。

在此示例中,我们在 (0,0)、(1,1) 和 (2,2) 中有一些内容。

                ROW
         0       1       2
     *-------*-------*-------*
     |       |       |       |
   0 |   X   |       |       |
C    |       |       |       |
O    *-------*-------*-------*
L    |       |       |       |
U  1 |       |   X   |       |
M    |       |       |       |
N    *-------*-------*-------*
     |       |       |       |
   2 |       |       |   X   |
     |       |       |       |
     *-------*-------*-------*

在此示例中,我们在 (0,0) 和 (2,2) 中有一些内容。

         0       2
     *-------*-------*
     |       |       |
   0 |   X   |       |
     |       |       |
     *-------*-------*
     |       |       |
   2 |       |   X   |
     |       |       |
     *-------*-------*

在此示例中,我们在 (1,0)、(2,1) 和 (2,2) 中有一些内容。

         0       1       2
     *-------*-------*-------*
     |       |       |       |
   1 |   X   |       |       |
     |       |       |       |
     *-------*-------*-------*
     |       |       |       |
   2 |       |   X   |   X   |
     |       |       |       |
     *-------*-------*-------*

上面的示例说明了根据您用小部件填充的行和网格自动显示的内容。

至于像这样的论点sticky这些用于管理每个小部件的行为。例如,如果我们告诉一个小部件填充给定行/列中的所有空间,那么我们将使用sticky='nsew'。如果我们希望一个小部件在给定的行/列中水平但不垂直地拉伸,我们将使用sticky='ew'对于东/西。请记住粘性参数是为了grid(). The pack()几何管理器有它自己的论据。

有很多选项,您可以在此处找到它们的列表及其描述:

For grid()

For pack()

以下面的例子为例。即使您调整窗口大小,此代码也将始终设置窗口的标签和按钮中心。这比地点更容易管理。

您可以在几何管理器中使用许多有用的参数来实现您想要的任何行为或对齐方式。只需花时间深入研究即可。我知道place()感觉像是最好的选择(在布莱恩纠正这个想法之前我第一次开始时也这​​么认为:D)但事实并非如此。

import tkinter as tk

root=tk.Tk()
root.rowconfigure(0, weight=1)
root.rowconfigure(2, weight=1)
root.columnconfigure(0, weight=1)
root.columnconfigure(2, weight=1)

center_frame = tk.Frame(root)
center_frame.grid(row=1, column=1, sticky='nsew')

tk.Label(center_frame, text='Name/ID').grid(row=0, column=0)
tk.Label(center_frame, text='Password').grid(row=1, column=0)
tk.Button(center_frame, text='Enter').grid(row=2, column=1)

root.mainloop()

这是一个使用的示例pack()。我发现grid()是我要去的但是pack()也可以用来完成很多事情。

import tkinter as tk

root=tk.Tk()

center_frame = tk.Frame(root)
center_frame.pack(expand=True)

tk.Label(center_frame, text='Name/ID').pack(side='top')
tk.Label(center_frame, text='Password').pack(side='top')
tk.Button(center_frame, text='Enter').pack(side='right')

root.mainloop()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找除已使用的锚点之外的另一个锚点的位置 的相关文章

随机推荐

  • 非递归地检索二叉树节点的深度

    任何人都可以指出一种获取二叉树中节点深度的方法 不是平衡树 或 BST 不使用递归 最好使用 Java C C 节点表示为 class Node Node Left Node Right string Value int Depth 我的第
  • Camel-K 无法识别本地包

    我有一个使用自己的处理器的 RouteBuilder 类 当使用 Maven 在 Camel 中本地运行时 它运行良好 但是 当我尝试使用camel k时 它说找不到该包 有什么我需要做的吗 我的处理器 package com test p
  • 帕累托优化 - 非支配点

    我编写了一个算法 它返回一个与 nsga2 返回的列表类似的列表 mco 包的 nsga2 pdf 该算法本身无法识别一个点是否为非支配点 它返回的一些点是主导的 它只包含点及其值 而不包含 nsga2 返回的逻辑向量 我试图获得非支配点
  • 从对象(日期对象)解构函数

    如果我想破坏一个对象我会这样做 const obj a a fn gt some function const fn obj fn OR const a fn obj console log fn 这不适用于Date目的 未捕获的类型错误
  • Python 中的字典有单一的 repr 值吗?

    In this question 有人建议在字典上调用 repr 是将其存储在另一个字典中的好方法 这取决于 repr 是否相同 无论键如何排序 是这样吗 附言 最初问题的最优雅的解决方案实际上是使用 freezeset 不 键添加到字典的
  • ipython笔记本工具栏自定义

    我想在 ipython 笔记本上添加一个新的工具栏按钮 我得到了一个好的link提到了这一点 所以我创建一个新文件 ipython profile default static custom custom js 包含以下内容 IPython
  • PdfBox 编码符号货币欧元

    我使用 Apache PDFBox 库创建了一个 PDF 文档 我的问题是在页面上绘制字符串时对欧元货币符号进行编码 因为基本字体 Helvetica 不提供此字符 如何将输出 转换为符号 不幸的是 PDFBox 的字符串编码还远非完美 版
  • 用于 glmer 的用户定义链接函数,用于已知命运生存建模

    生态学中的常见情况是具有二元结果 0 死亡 1 生存 的生存模型 其中个体 在本例中考虑鸟类的个体筑巢尝试 在暴露于死亡风险的天数方面存在差异 为了解决这个问题 我们使用了修改后的逻辑回归 它将暴露天数合并到链接函数中 正如 Shaffer
  • SwiftUI:设置选择器行高

    对于大字体 a 中的线条Picker是重叠的 我该如何更改Picker s行高 提示 lineSpacing修饰符不会这样做 See Also 这个问题类似于Ejaaz 但他的问题至今尚未得到答复 问题 The Code 以下可运行代码产生
  • 自定义 WPF 绑定

    我有一个模拟绑定的自定义 MarkupExtension 它在正常分配中效果很好 但在样式设置器中使用时效果不佳 例如
  • FileUpload1.HasFile 始终返回 false

    我正在使用 ASP net 文件上传控件上传文件 我的 FileUpload1 HasFile 总是返回 false if FileUpload1 HasFile DBOperations db new DBOperations try F
  • 汇编中的伪指令和软件抽象

    这更多的是一个一般性的理论问题 我正在学习一些汇编语言 并注意到一些软件 例如 MARS for MIPS 实现架构的真实指令集中不存在的抽象 这似乎被称为伪指令 其示例是li 以及其他舒适的抽象 例如整齐的数组创建等 我的问题是 如果我想
  • Android Studio 正在为 React-Native 项目生成非常旧的 apk,比如 3 个月前的版本

    Android Studio 正在为 React Native 项目生成非常旧的 apk 比如 3 个月前的版本 但是在运行此命令 react native run android 时在模拟器中完美运行 过程 打开文件所在位置 构建 gt
  • 用虚函数大括号初始化结构

    大括号初始化 struct A int a int b void foo A a 1 2 效果很好 但如果将 foo 改为虚函数 则编译不会出错 错误 C2440 初始化 无法从 初始化列表 转换为 I find this 聚合是一个数组或
  • 如何使用正则表达式在 C# 中从 MongoDB 集合中获取数据?

    我在用MongoDB Drivers我的 nuget 包MVC C Web 应用程序与 MongoDB 数据库通信 现在 我想根据特定列及其值获取数据 我使用下面的代码来获取数据 var findValue John var clientT
  • 文本输入中字符串部分的不同文本颜色

    当文本输入的值仍在输入字段中时 如何对字符串的一部分进行样式设置 我知道可以使用元素中具有 contentedible 属性的元素来做到这一点 但 Google 在文本类型的输入中使用其即时建议来做到这一点 输入中出现的第一个完成 建议 虽
  • 检查用户是否安装了Chrome扩展程序

    我正在构建一个 Chrome 扩展程序 为了让整个事情按照我希望的方式工作 我需要一个外部 JavaScript 脚本来检测用户是否安装了我的扩展程序 例如 用户安装我的插件 然后访问带有我的脚本的网站 该网站检测到我的扩展已安装并相应地更
  • 用户输入的数字未相加

    我正在尝试编写一个程序 从用户那里读取一个整数 通过键盘 将其加 100 并显示结果 我所能做的就是让它们像 2 个字符串一样连接起来 而不是将数字加在一起 我不明白为什么它不会添加它们 import java io public clas
  • 如何使用QWebEngineUrlRequestInterceptor

    我需要拦截 Qt 应用程序中的 WebEngine qml 组件中发出的请求 我找到了有关 QWebEngineUrlRequestInterceptor 的文档 它似乎就是这样做的http doc qt io qt 5 qwebengin
  • 查找除已使用的锚点之外的另一个锚点的位置

    我创建了一个代码来显示我的问题 它看起来像这样 userNameID tkinter Label root text Name ID userNameID place x 640 y 320 anchor e userNameID tkin