[英]Zoom In and Out in Text widget tkinter
我正在嘗試制作記事本的克隆,但卡在放大和縮小功能中。 我能夠通過每次用戶按下放大和縮小選項時更改文本大小來實現放大和縮小功能,但我認為這不是真正的實現,因為我認為它實際上並沒有放大或縮小。
通過大量搜索,我開始知道Canvas具有可用於實現放大功能的scale方法,並且我能夠制作放大和縮小文本小部件的功能,但它不會影響文本大小。 據此, 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()
在記事本中,文本大小不會增加。 我認為文本小部件正在縮放以保持文本大小不變。 那么我怎樣才能像記事本那樣制作放大和縮小文本的功能呢?
縮放畫布不會導致嵌入的小部件增長或縮小。 實現縮放的唯一方法是更改文本小部件中的字體大小。
以下代碼是您的代碼的修改版本。 需要注意的有:
Font
對象作為字體lambda
; 相反,它直接調用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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.