簡體   English   中英

放大和縮小文本小部件 tkinter

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM