为什么框架的自然高度不立即更新?

2024-06-23

我正在编写一个小部件来显示一些文本行(通过Label in a Frame)并且一旦文本高度大于包含内容的高度,就需要调整字体大小Frame.

为此,我正在查询.winfo_reqheight()为了LabelFrame文本更新后,想法是减少它并重写文本 - 循环,直到它适合(热烈欢迎任何更好的想法)

无论如何,我编写了一个测试脚本来实现该功能,但是我得到的高度Frame与其中之一相比是一次性的Label(更新文本后)。

实际上:代码

import Tkinter as tk

class App():
    def __init__(self):
        self.root = tk.Tk()
        self.root.geometry("200x200")
        self.f = tk.Frame(self.root)
        self.f.pack(expand=True, fill=tk.BOTH)
        self.l = tk.Label(self.f)
        self.l.pack(expand=True, fill=tk.BOTH)
        self.root.bind("q", func=self.addline)
        self.counter = 0

    def addline(self, event):
        mylist = list()
        self.counter += 1
        for _ in range(self.counter):
            mylist.append("hello")
        message = '\n'.join(mylist)
        self.l.configure(text=message, font=('Arial', 30))
        print("frame: {0} label {1}".format(self.f.winfo_reqheight(), self.l.winfo_reqheight()))

App().root.mainloop()

按三下后q显示

和输出

frame: 21 label 51
frame: 51 label 96
frame: 96 label 141

看看大小如何Frame是一过吗?尽管同时查询两个小部件,但出现此行为的原因是什么?


在事件处理程序返回之前,所做的更改不会更新。

但您可以使用强制更新update_idletasks http://effbot.org/tkinterbook/widget.htm#Tkinter.Widget.update_idletasks-method:

self.l.configure(text=message, font=('Arial', 30))
self.l.update_idletasks()

UPDATE

winfo_height()文档 http://effbot.org/tkinterbook/widget.htm#Tkinter.Widget.winfo_height-method还提到update_idletasks:

获取此小部件的高度(以像素为单位)。请注意,如果窗口 不受几何管理器管理,此方法返回 1。给你得到 真正的价值,你可能需要打电话update_idletasks first。你可以 也使用winfo_reqheight获取小部件请求的高度(即 是,小部件本身根据它的大小定义的“自然”尺寸 内容)。

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

为什么框架的自然高度不立即更新? 的相关文章

随机推荐

  • 在 Ubuntu 14.04.3 中运行 oracle imp / exp

    安装 oracle 软件包后 oracle instantclient12 2 basiclite 12 2 0 1 0 1 x86 64 rpm and oracle instantclient12 2 tools 12 2 0 1 0
  • BinaryWriter 和 BinaryFormatter.Serialize 之间的区别?

    我是对象序列化的新手 在学习如何使用读取和写入文件 反序列化和序列化 的过程中BinaryFormatter 我碰到BinaryReader and BinaryWriter 它似乎在做同样的事情 之间有一些细微的区别吗BinaryForm
  • 如何在数组类型上调度多方法

    我正在研究一种多方法 需要更新序列中一堆不同事物的哈希值 看起来相当简单 直到我尝试输入 X 数组的类型 defmulti update hash class 2 type byte 1 gt java lang Byte defmetho
  • git,Heroku:预接收挂钩被拒绝

    我正在设置 git 存储库并尝试将其链接到 Heroku 当我运行命令时 git push heroku master 我收到 Counting objects 7 done Delta compression using up to 2
  • 如何在 Windows 窗体 C# 中将扩展 ASCII 转换为十进制?

    我正在编写一个Windows应用程序 我在转换时遇到问题扩展 ASCII 128 256 到其十进制等值 当我从 jar 文件中接收到扩展 ASCII 例如 时 它会像这样进入 C 应用程序 我可以知道如何将其转换为十进制等值 即 140
  • C# Linq 平均

    我有一个包含类似于以下数据的表 Group TimePoint Value 1 0 1 1 0 2 1 0 3 1 1 3 1 1 5 我想投影一个这样的表 Group TimePoint AverageValue 1 0 2 1 1 4
  • System.Net.NetworkInformation IPv4Mask 无法在 MonoTouch 中工作?

    我使用以下代码获取 iPhone 上当前可用的网络接口列表 foreach NetworkInterface l objNetworkInterface in NetworkInterface GetAllNetworkInterfaces
  • 使用 FragmentStatePagerAdapter 从 ViewPager 动态删除项目

    围绕这个话题有很多讨论 ViewPager PagerAdapter 不更新视图 https stackoverflow com a 7287121 494659 动态更新ViewPager https stackoverflow com
  • 缓存隐式解析

    为了减少项目的编译时间 我缓存了通过隐式查找解析的某些类型类 但这看起来有点麻烦 因为直接的实现不起作用 scala gt implicit val x String implicitly String x String null 隐式查找
  • SQL Server JOIN 缺少 NULL 值

    假设我有以下 2 张表 Table1 Table2 Col1 Col2 Col3 Col1 Col2 Col4 a b c a b d e
  • 如何删除其他目录中不存在的文件?

    我有两个目录 我们称它们为src and build 我的构建系统可以正常工作 因此对于所有具有更新时间的文件src比在build它从复制文件src to buid并进行一些转换 缩小 版本控制等 否则会跳过 因为文件被认为是最新的 然而
  • 在 python 中将 url 添加到 mysql 行

    我正在尝试使用 python 和 MySQLdb 库将 url 添加到 mysql 中的文本行 但是当我运行代码时 它说我的 sql 语法中有错误 你能告诉我我做错了什么吗 这是我的代码 import MySQLdb as mdb conn
  • 如何在 Safari 中调试嵌入式 JavaScript

    编辑 根据 dmi3y 的建议 更新了标题 将 内联 更改为 嵌入 以更好地反映问题的性质 在 Chrome 中 我通常通过在 JS 文件中设置断点来调试 JS 但是 Chrome 还允许您在存在内联 JS 的情况下使用实际文档执行此操作
  • 在 Windows 上使用 asprintf()

    我编写了一个在Linux上完美运行的C程序 但是当我在Windows上编译它时 它给我一个错误 说asprintf 未定义 它应该是 stdio 库的一部分 但似乎许多编译器不包含它 我可以在 Windows 上使用哪个编译器来使用 asp
  • 如何使用nix构建docker容器?

    我有一个 Nix 包 我想将其捆绑到 docker 容器中 具体来说 我想使用 Nix 作为更具表现力的替代方案Dockerfile拥有更快的 非线性 图像构建 我找到了有关的文档dockerTools buildImage https n
  • .NET 集合是一个结构体

    这是一个有趣的问题 是否有一个集合is net 框架中某处的结构 只是为了澄清 所有现有的集合 列表 数组等 都是引用类型 即使您将泛型参数设置为值类型 但我想知道是否有一种方法可以创建一个实际上是结构的集合 我显然不打算传递它 这会导致大
  • 关闭并打开“wifi和移动网络位置”后活动识别不起作用[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用活动识别来检测用户活动 我发现一个奇怪的行为 在我关闭并打开 WiFi 和移动网络位置 后 应用程序没有获得任何活动识别更新
  • 为什么我必须明确告诉 Spark 要缓存什么?

    在 Spark 中 每次我们对 RDD 执行任何操作时 都会重新计算 RDD 因此 如果我们知道 RDD 将被重用 我们应该显式地缓存 RDD 比方说 Spark 决定延迟缓存所有 RDD 并使用 LRU 自动将最相关的 RDD 保留在内存
  • 如何在fortran中调用和使用另一个子程序中的子程序?

    我正在编写一个程序 其中主程序包含许多子例程和函数 为了构造主程序的这些子程序之一 假设是子程序 A 我需要使用另一个子程序 假设是 B 我的问题是 如何调用子程序A并使用子程序B 我是初学者 我已经搜索了很多 但没有找到我清楚理解的东西
  • 为什么框架的自然高度不立即更新?

    我正在编写一个小部件来显示一些文本行 通过Label in a Frame 并且一旦文本高度大于包含内容的高度 就需要调整字体大小Frame 为此 我正在查询 winfo reqheight 为了Label和Frame文本更新后 想法是减少