2012-03-23 114 views
5

我正在尝试为初学者创建一个简单的文字处理器,以更好地学习Python。如何停止Tkinter文本小部件在字体更改时调整大小?

我使用的Tkinter Text插件用于主编辑程序,唯一的问题是高度宽度由字符定义。

这当我改变字体产生了一个问题,因为并非所有的字体都是相同的宽度。

每次字体改变时,窗口小部件文本重新大小,虽然在技术上它是相同的宽度和高度。这看起来很荒谬,当试图键入一些东西时,我试图尽可能使文字处理器漂亮

有没有办法以像素为单位定义宽度和高度?

.grid_propagate(False)是没有用的尺寸在技术上是不改变,只有字符宽度。

我试图远离wxPython离开了,因为我所做的一切到这一点已经在Tkinter的。

我已经做了大量的谷歌搜索,但没有找到解决方案。

回答

9

当你说你不能使用grid_propagate(False),因为你可以你就错了。 grid_propagate是关系到实际大小,而不是大小属性。另外,如果您只是使用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() 
+0

我指的是不与文本窗口小部件工作grid_propagate。从技术上讲,它可以工作,但它仍然会扩展,因为它的宽度是以字符为单位的,所以它的字符长度保持不变,但并不是所有的字符大小都是相同的。 文本小部件没有填满我的整个窗口,我想在那里有空间来添加按钮。 问题是实际的“文本”小工具不断调整大小以满足每种不同字体的需求。在输入内容并更改字体并查看文本小部件扩展和收缩时,它看起来很愚蠢。 – reallycoolnerd 2012-03-24 00:24:02

+0

@reallycoolnerd:我很抱歉,但你对'grid_propagate'错误。它与size属性无关,它与widget的实际大小有关。如果你可以在你尝试使用'grid_propagate'的地方显示代码,但它不起作用,我们可以修复它。这听起来像你不明白'grid_propagate'是如何工作的。你知道你必须在父母身上调用它吗?它在文本小部件本身上调用'grid_propagate'没有任何效果。 – 2012-03-24 01:00:42

+0

@reallycoolnerd:有没有关于我的例子,让你感到困惑?该示例清楚地显示了如何通过设置容器的大小和关闭几何体传播来设置文本小部件的大小(以像素为单位)。也许如果你能解释为什么你不理解这个例子,那么我可以想出如何改进它。 – 2012-03-24 01:06:31

相关问题