我正在尝试为初学者创建一个简单的文字处理器,以便更好地学习Python。
我正在使用Tkinter Text
小部件作为主编辑程序,唯一的问题是 height 和 width 是由字符定义的。
当我更改字体时会出现问题,因为并非所有字体的宽度都相同。
每次更改字体时,“文本”窗口小部件都会重新调整大小,但从技术上讲,它的宽度和高度相同。在尝试输入内容时,这看起来很荒谬,我正在努力使字处理器尽可能很好。
有没有办法以像素为单位定义宽度和高度?
.grid_propagate(False)
对于尺寸在技术上没有变化没有用,只有字符宽度。
我现在正试图远离wxPython
,因为到目前为止我所做的一切都在Tkinter。
我已经进行了无数次广泛的谷歌搜索,但没有找到解决方案。
答案 0 :(得分:10)
当你说你不能使用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()
答案 1 :(得分:0)
..测试了此结果:这适用于帧大小,但不适用于(滚动的)文本窗口小部件大小。 我的设置有点复杂,有一个用于2个站点的主机,每个站点的主机和具有各种内容的帧,即一个滚动文本小部件。
添加grid_propagate,* _ row-和* _columnconfigure可以调整主框架的大小,即使在主框架和内容框架中添加了网格选项,也可以控制主框架的大小。.当更改字体时,widgetsize也会更改-并且,在最后一个示例中,scrolledtext-widget消失在其右侧框架的后面(包含其他小部件)。.
答案 2 :(得分:0)
使用pack geometry manager
打包小部件。
我正在创建一个记事本,并希望字体样本区域显示字体大小。 所以我创建了一个标签框架并在其中添加了标签-即AabYyZz-以显示字体示例。
当我增加字体大小时,标签框架的大小也增加了,因此我尝试了.pack_propagate
方法,并且有效。