如何使用 Tkinter 设置网格的位置?

2024-01-26

甚至可以在 Tkinter 中设置网格的绝对位置吗?我正在尝试创建一个如下所示的 GUI,但我可能采用了错误的方式。那么如果可以的话,网格位置如何设置呢?

目标图形用户界面:

到目前为止,我的 GUI 的结果是这样的:

如您所见,我的新联系人需要位于右侧,而联系人列表应位于左侧。我了解如何使用绝对值移动联系人列表,但我可以对网格元素执行相同的操作吗?或者我应该对所有这些使用绝对值并结合填充?

目前,这是我的代码:

from tkinter import *
contacts=['Justin Day']

class Contact_manager (Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)

        self.parent = parent
        self.initUI()

    def initUI(self):
        self.parent.title("Contact Manager")
        self.pack(fill=BOTH, expand=1)

        #New contact grid
        Label (self, text = "New Contact").grid (row=0, columnspan=2)
        Label (self, text = "First Name:").grid (row=1, sticky=E)
        Label (self, text = "Last Name:").grid (row=2, sticky=E)
        Label (self, text = "Phone#").grid (row=3, sticky=E)

        self.entry1 = Entry(self)
        self.entry2 = Entry(self)
        self.entry3 = Entry(self)
        self.entry1.grid (row=1, column=1)
        self.entry2.grid (row=2, column=1)
        self.entry3.grid (row=3, column=1)

        friend_check = IntVar()
        self.friend_check = Checkbutton (self, variable = friend_check,
                                 command = self.friend_box,
                                 text = "Friend")
        self.friend_check.grid (row=4, columnspan=2)

        Label (self, text = "Email:").grid (row=5, sticky=E)
        Label (self, text = "Birthday:").grid (row=6, sticky=E)

        self.entry4 = Entry(self)
        self.entry5 = Entry(self)
        self.entry4.grid (row=5, column=1)
        self.entry5.grid (row=6, column=1)

        #Contact listbox
        Label (self, text = "Contact List").place(x=20, y=190)
        contact_lb = Listbox(self)
        for i in contacts:
            contact_lb.insert(END, i)

        contact_lb.bind("<<ListboxSelect>>", self.onSelect)
        contact_lb.place(x=20, y=210)

    def onSelect(self, val):

        sender = val.widget
        idk = sender.curselection()
        value = sender.get(idx)

        self.var.set(value)

    def friend_box():
        if friend_check.get() == 1:
            contacts.append(Friend(f, l, p, e, bd))
        else:
            contacts.append(Person(f, l, p))
def main():

    root = Tk()
    ex = Contact_manager(root)
    root.geometry('600x700+200+100')
    root.mainloop()

if __name__ == '__main__':
    main()

您应该采用分而治之的方法在 GUI 中布置小部件。不要尝试一次完成所有事情或使用一个几何管理器来协调一个窗口中的所有内容。要有条理,一次解决一个小问题。

例如,在您的目标 GUI 中,您似乎有四个部分:联系人列表、搜索框和按钮、新的联系表单以及右下角的某些内容(搜索结果?)。如果我正确地认为这些是四个不同的区域,那么首先创建四个框架。使用网格将它们放置在主窗口的四个角。为每个帧指定不同的颜色(用于调试目的)。现在,摆弄选项,直到这四个区域按照您想要的方式增长和缩小。确保为列和行赋予权重,以便它们都能正确调整大小。

现在您已经做到了这一点,您有四个更小、更易于管理的布局问题。现在,我可能错了——也许你有两个区域,左边和右边。或者也许你有三个 - 左边,然后是右上和右下。现在我们假设我是对的,但无论如何,技术保持不变。

您似乎已经有了联系表单的布局,因此请将它们移至右上角的框架中。确保当您扩大和缩小窗口时它们都正确地扩大和缩小(因此,您扩大和缩小了包含的框架)。

完成此操作后,请进行下一部分 - 将联系人列表放在左上角。再次确保其大小调整正确。此时,您不必担心右侧的小部件,因为您已经整理好了这些小部件。对于本部分,您不需要网格,您可以使用 pack,因为它只是几个相互堆叠的小部件。但是,您可以使用最有意义的一个。

继续以这种方式处理 GUI 的其余两个角。要有条理,一次处理一个小的独立部分。

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

如何使用 Tkinter 设置网格的位置? 的相关文章

  • 如何并排绘制具有相同 X 坐标的条形图(“闪避”)

    import matplotlib pyplot as plt gridnumber range 1 4 b1 plt bar gridnumber 0 2 0 3 0 1 width 0 4 label Bar 1 align cente
  • 需要根据数据框中的行号应用不同的公式

    我正在努力在数据框中找到某种移动平均值 该公式将根据正在计算的行数而变化 实际场景是我需要计算Z列 Edit 2 以下是我正在使用的实际数据 Date Open High Low Close 0 01 01 2018 1763 95 176
  • 函数名称未定义

    我有一段代码 看起来像这样 if name main main def main print hello 但是 当我尝试运行此代码时 出现错误 NameError 名称 main 未定义 我是否没有在函数 def main 的第一行定义名称
  • 按每个元素中出现的数字对字符串列表进行排序[重复]

    这个问题在这里已经有答案了 我有一个脚本 其目的是对不断下载到服务器上的空间数据集文件进行排序和处理 我的列表目前大致如下 list file t00Z wrff02 grib2 file t00Z wrff03 grib2 file t0
  • 学习Python中的解析器

    我记得我读过有关解析器的内容 您只需提供一些示例行 它就知道如何解析某些文本 它只是确定两条线之间的差异 以了解可变部分是什么 我以为它是用 python 写的 但我不确定 有谁知道那是什么图书馆吗 可能你的意思是模板制作器 http co
  • 有什么好的适用于 Google App Engine 应用程序的 AJAX 框架吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的 Google App Engine 应用程序中实现 AJAX 因此我正在寻找一个好的
  • 是否可以在 IPython 控制台中显示 pandas 样式?

    是否可以显示熊猫风格 https pandas pydata org pandas docs stable user guide style html在 iPython 控制台中 Jupyter 笔记本中的以下代码 import panda
  • 删除 tkinter 文本默认绑定

    我正在制作一个简单的 tkinter 文本编辑器 但我想要所有默认绑定文本小部件如果可能的话删除 例如当我按Ctrl i它默认插入一个制表符 我制作了一个事件绑定来打印文本框中有多少行 我将事件绑定设置为Ctrl i以及 当我运行它时 它会
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 类变量:“类列表”与“类布尔值”[重复]

    这个问题在这里已经有答案了 我不明白以下示例的区别 一次类的实例可以更改另一个实例的类变量 而另一次则不能 示例1 class MyClass object mylist def add self self mylist append 1
  • Python 3 - 如何将 tkinter 进度条与 bat 文件一起使用?

    到目前为止 蝙蝠运行了 但进度条没有运行 我如何将两者联系起来 这是输出的图像 https i stack imgur com ytZ6F jpg https i stack imgur com ytZ6F jpg from tkinter
  • 在字符串内打印单引号

    我想输出 XYZ s ABC 我在Python IDLE中尝试了以下3条语句 第一条和第二条语句输出 a before 带打印功能的第三条语句不输出 before 作为 Python 新手 我想了解为什么 之前输出 在第 1 条和第 2 条
  • 如何将 django ModelForm 字段显示为不可编辑

    接受我的初步教训django ModelForm 我想让用户能够编辑博客中的条目 BlogEntry has a date postedTime title and content 我想向用户展示一个编辑表单 其中显示所有这些字段 但仅包含
  • 为什么我会在 Python 字符串格式中使用除 %r 之外的其他内容?

    我偶尔会使用 Python 字符串格式 这可以像这样完成 print int i Float f String s 54 34 434 some text 但是 这也可以这样做 print int r Float r String r 54
  • 如何将Python包从旧版本安装到新版本?

    我正在使用 python 3 7 最近在 Linux 中安装了 python 3 8 是否有任何 bash 命令或脚本可以获取 3 7 的所有软件包列表并在 3 8 版本中一一安装 我想避免每个包裹都手工完成 注意 我将它们安装在我的系统中
  • 如何使用 python 模块的多个 git 分支?

    我想使用 git 来同时处理我正在编写的模块中的多个功能 我目前正在使用 SVN 只有一个工作区 因此我的 PYTHONPATH 上只有该工作区 我意识到这不太理想 所以我想知道是否有人可以建议一种更 正确 的方法来做到这一点 让我用一个假
  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • 关闭正在运行代码的 IPython Notebook

    怎么运行的 我在 IPython Notebook 中运行了一些代码 一些迭代工作 我不小心关闭了正在运行的笔记本的浏览器 但回到 IPython 仪表板 我发现这个特定的笔记本尚未关闭 所以如果我再次打开笔记本 我会在它正在执行的代码前面
  • 如何创建简单的梯度下降算法

    我正在研究简单的机器学习算法 从简单的梯度下降开始 但在尝试用 python 实现它时遇到了一些麻烦 这是我试图重现的示例 我获得了有关房屋的数据 居住面积 以英尺为单位 和卧室数量 以及最终的价格 居住面积 英尺2 2104 卧室 3 价
  • 在自定义 keras 层的调用函数中传递附加参数

    我创建了一个自定义 keras 层 目的是在推理过程中手动更改前一层的激活 以下是基本层 它只是将激活值乘以一个数字 import numpy as np from keras import backend as K from keras

随机推荐

  • 正则表达式:懒惰更糟糕吗?

    我一直这样写正则表达式 a href target blank lt a 但我刚刚了解到这个懒惰的事 http www regular expressions info examples html我可以这样写 a href target b
  • Python无法访问字典

    Getting TypeError string indices must be integers当尝试访问 python 中的字典时 我尝试过使用json loads r2 这产生了 TypeError the JSON object m
  • 如何使用getCropAndSetWallpaperIntent?

    我尝试使用 getCropAndSetWallpaperIntent 方法 但出现错误 这是我的代码 Uri uri Uri parse content getFilesDir image path ContentResolver cont
  • Angular 8 嵌套拖放

    不幸的是我找不到常见问题的解决方案 这是代码的链接https stackblitz com edit angular ygwaxs https stackblitz com edit angular ygwaxs 我有这样的场景 从服务器我
  • 简单的 Javascript 碰撞检测?

    我正在尝试使用 jquery javascript html 和 css 制作一个简单的游戏 我一直陷入碰撞检测 code var map 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
  • 在 Sequel 中使用 UTC?

    我不想将时间存储在我当地的时区 但续集让我变得非常困难 我可以在将它们放在那里之前将它们设置为 UTC 有点痛苦 但是当我将它们取出时 它会假设它们是本地日期 然后它们都是未来的 8 小时 这是还没有实施的事情吗 如果是这样 有什么解决方法
  • UISearchBarSearchField 背景视图颜色

    I am trying to change the background color of the search bar text field and i have searched and tried lots of solutions
  • 流星模板中包含的谷歌地图被渲染两次

    我有以下模板
  • 设置 Visual Studio 代码以使用 R - “win32 无法使用 R”

    我正在尝试设置 R 以使用 Visual Studio 代码 当我用按键执行一行时CTRL ENTER我收到错误 win32 无法使用 R 我遵循本文中提出的建议中等职位 https medium com analytics vidhya
  • 如何设置phpmyadmin的用户名和密码[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何设置phpmyadmin的用户名和密码 我正在为 localhost 使用 xampp 软件 并且我想锁定我的 phpmyadmin 页面 当我打
  • Intl.NumberFormat 在节点和浏览器中的不同行为

    如果我在浏览器和节点中运行此代码 我会得到两个不同的结果 const moneyFormatter new Intl NumberFormat it IT style currency currency EUR minimumFractio
  • 如何在 jQuery 中永久运行 .animate 函数?

    this css left 100px function endless this animate left 100px easing linear duration 5000 complete function this css left
  • 实体框架级联删除 - FOREIGN KEY 约束

    我对以下模型有问题 public class ProjectPage Key public Guid Id get set public Guid HeaderId get set public ProjectPage Header get
  • 如何在 JList 中启用拖放

    我有一个 JList 并希望用户能够使用拖放功能对列表中的元素重新排序 使用我自己的 ListModel 和 ListCellRenderer 如果这有什么不同的话 我需要创建哪些对象 以及如何处理该操作 修改后的 Jan Taccis 答
  • 从 Python rpy2 使用命令行参数调用 R 脚本

    我希望能够使用 rpy2 模块从 python 调用 R 文件 我希望能够将参数传递给这些脚本 这些脚本可以由 R 的 commandArgs 函数解释 所以如果我的 R 脚本 trivial script r 好像 print comma
  • 寻求一种更好的方法从查找表中添加 data.table 中的列

    我想创建一个新专栏key在我的 data table 中 通过公共列与查找表合并index1 index2 然后从这个新的值key柱子 a b c 我想生成 3 个新列 a b c 索引valuedata table 中的列 我的 data
  • Angular 2 HTTP 超时

    我在发布有关 HTTP 超时的自定义错误消息时遇到问题 这是一个简单的例子 return this http get url timeout 5000 new Error Error message 我看到大家都用新错误 错误消息 但我收到
  • WebView中的支付流程(Android)

    我有一个支付网关的网址 我需要在其中输入信用卡号等 我可以使用 WebView 打开此页面并直接在我的应用程序中付款吗 不打开像 Chrome 这样的单独的网络客户端 谷歌对于用户直接在 WebView 中输入信用卡 借记卡信息的应用程序发
  • 在控制台应用程序内以静默方式使用 ADFS 进行身份验证

    我有一个引用 ADAL net 库的 C 控制台应用程序 Microsoft IdentityModel Clients ActiveDirectory 版本 2 19 208020213 控制台应用程序的目的是使用受 ADFS 保护的 H
  • 如何使用 Tkinter 设置网格的位置?

    甚至可以在 Tkinter 中设置网格的绝对位置吗 我正在尝试创建一个如下所示的 GUI 但我可能采用了错误的方式 那么如果可以的话 网格位置如何设置呢 目标图形用户界面 到目前为止 我的 GUI 的结果是这样的 如您所见 我的新联系人需要