在文本窗口小部件tkinter中放大和缩小



我正试图克隆Notepad,但一直处于放大和缩小功能。我可以通过每次用户按下放大和缩小选项时更改文本大小来实现放大和缩小功能,但我认为这不是真正的实现,因为我认为它实际上不是放大或缩小。

经过大量搜索,我知道Canvasscale方法,可以用来实现放大功能,我可以制作放大和缩小文本小部件的功能,但它不会影响文本大小。根据此,Canvas中的scale方法仅更改小部件的坐标。

到目前为止我做了什么

import tkinter as tk
root = tk.Tk()
root.state('zoomed')
font = ('Courier', 10)

def zoom(zoom_scale):
global font
font = (font[0],) + (font[1] + 1,)
text.config(font=font)

canvas = tk.Canvas(root)
frame = tk.Frame(canvas)
zoom_scale = tk.Scale(root, orient='vertical', from_=1, to=500)
zoom_scale.config(command=lambda args: zoom(zoom_scale))
zoom_scale.set(10)
text = tk.Text(frame, font=font)
text.grid(row=0, column=0)
canvas.create_window(0, 0, anchor='nw', window=frame)
# make sure everything is displayed before configuring the scroll region
canvas.update_idletasks()
canvas.configure(scrollregion=canvas.bbox('all'))
canvas.pack(fill='both', side='left', expand=True)
zoom_scale.pack(fill='y', side='right')
root.mainloop()

在记事本中,文本大小不会增加。我认为文本小部件正在缩放,保持文本大小不变。那么,我如何制作像NOTEPAD一样放大和缩小TEXT的功能呢

缩放画布不会导致嵌入式小部件增长或收缩。实现缩放的唯一方法是更改文本小部件中的字体大小。

以下代码是您的代码的修改版本。需要注意的是:

  • 代码使用Font对象作为字体
  • 该量表不使用CCD_ 2;而是直接调用zoom
  • zoom将配置字体对象的大小,这将导致文本小部件缩放
  • 画布和画布内的框架已被移除
  • 根窗口小部件通过geometry得到了明确的大小,以防止在文本窗口小部件增长或收缩时窗口增长和收缩

import tkinter as tk
from tkinter.font import Font
root = tk.Tk()
root.geometry("500x500")
font = Font(family="Courier", size=10)
def zoom(size):
font.configure(size=size)
zoom_scale = tk.Scale(root, orient='vertical', from_=1, to=500)
zoom_scale.config(command=zoom)
text = tk.Text(root, font=font)
zoom_scale.pack(fill='y', side='right')
text.pack(side="left", fill="both", expand=True)
zoom_scale.set(10)
root.mainloop()

最新更新