当前位置: 首页 > 面试题库 >

如何在字体更改时停止Tkinter Text小部件调整大小?

贺福
2023-03-14
问题内容

我正在尝试为入门者创建一个简单的文字处理器,以更好地学习Python。

我将TkinterText小部件用于主要编辑程序,唯一的问题是 高度宽度 由字符定义。

当我更改字体时,这会产生问题,因为并非所有字体的宽度都相同。

每次更改字体时,“文本”小部件都会重新调整大小,尽管从技术上讲,它的宽度和高度是相同的。尝试输入内容时,这看起来很荒谬,我正在尝试使文字处理器尽可能

有没有一种方法可以定义像素的宽度和高度?

.grid_propagate(False)对于大小不变,在技术上不变,仅对字符宽度无效,这是没有用的。

我现在想远离,wxPython因为到目前为止我所做的一切都在Tkinter中。

我花了无尽的时间进行广泛的Google搜索,但没有找到解决方案。


问题答案:

当您说不能使用时grid_propagate(False),您错了,因为可以。grid_propagate实际 大小有关,与size
属性 无关。另外,如果您只是使用来给您的应用程序固定大小wm_geometry,则字体更改不会影响窗口的大小。

这是一个使用的示例grid_propagate,该示例将容器设置为固定大小(以像素为单位):

import Tkinter as tk
import tkFont

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self._textFont = tkFont.Font(name="TextFont")
        self._textFont.configure(**tkFont.nametofont("TkDefaultFont").configure())

        toolbar = tk.Frame(self, borderwidth=0)
        container = tk.Frame(self, borderwidth=1, relief="sunken", 
                             width=600, height=600)
        container.grid_propagate(False)
        toolbar.pack(side="top", fill="x")
        container.pack(side="bottom", fill="both", expand=True)

        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        text = tk.Text(container, font="TextFont")
        text.grid(row=0, column=0, sticky="nsew")

        zoomin = tk.Button(toolbar, text="+", command=self.zoom_in)
        zoomout = tk.Button(toolbar, text="-", command=self.zoom_out)
        zoomin.pack(side="left")
        zoomout.pack(side="left")

        text.insert("end", '''Press te + and - buttons to increase or decrease the font size''')

    def zoom_in(self):
        font = tkFont.nametofont("TextFont")
        size = font.actual()["size"]+2
        font.configure(size=size)

    def zoom_out(self):
        font = tkFont.nametofont("TextFont")
        size = font.actual()["size"]-2
        font.configure(size=max(size, 8))

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()


 类似资料:
  • 问题内容: 我仍在学习Java,如果有人可以帮助我,我将非常高兴! 对不起,英语不好,我是西班牙人!我正在制作一个平铺游戏,该游戏使用了经典的“游戏循环”,该引擎以60fps的速度限制了引擎的速度。循环睡眠,然后调用repaint();。这样很好!但.. 问题在于,当调整JFrame的大小或使其最大化时,将调用repaint事件!例如,当JFrame最大化/调整大小时,游戏以10000fps的速度

  • 中间有一个字母“你好世界”。如果你按下这个字母上的键盘“”,大小增加2,如果你按下“-”,大小减少2。但是字体大小应该总是在10到50分之间。一开始是16分。 我正在解决这个问题。 字体大小只有两个增加和两个减少。 输出 字体大小只有两个增加和两个减少。 预期 当字母向上时,字母变大2点;当字母向下时,字母变小2点。 它应该只有10到50分,运行时字母应该以16分开始。

  • 所以我开始了一个个人简历网站,我偶然发现了一个非常酷的东西:font awesome,它以文本的形式提供图形,允许你通过CSS添加字体效果。我的问题是一切都很好,直到我试图改变字体大小,无论什么原因,它就是不会改变。你有什么想法吗?我也是新的这里,我已经阅读通过如何使帖子,但如果我做错了,请让我知道。

  • 我有一个由两列组成的SWT网格布局。一列是一个标签,它应该正好是文本的水平尺寸。另一列是StyledText,它应该占据水平空间的剩余部分。但是,如果标签的大小发生变化(因为文本发生了变化),网格不会调整大小。这导致标签与StyledText重叠。我想要的是网格调整列的大小,这样左边的列变得足够大以容纳更长的文本,而右边的列正好缩小这个量。有几个关于SWT网格布局和在SO上调整大小的问题,但是没有

  • 除了这个问题:更改超文本标记语言电子邮件正文字体类型和大小在VBA,我想知道如何才能改变字体大小 当我从代码中删除字体大小时,它确实改变了字体系列。 谢谢你的协助,

  • 问题内容: 我一直试图(徒劳地)建立一个页面,当我更改窗口大小时,其元素将重新调整大小。我可以在CSS中使用它来处理图像,但是没有问题,但是我似乎无法在文本上完成相同的操作,而且我不确定在CSS中是否有可能。而且我似乎找不到能完成此任务的jQuery脚本。 当用户调整窗口大小时,我实质上希望页面能够动态流畅地缩放,而无需用户调用页面缩放。通过css在我的img div上这可以正常工作,但对于文本则