繁体   English   中英

Tkinter 笔记本内的文本小部件可调整大小/拉伸/字体可变

[英]Tkinter Text Widget to be inside Notebook as resizable/streched/font changable

  1. 为什么我不能在 Notebook widget(Tab) 里面用sticky拉伸 Text widget?
  2. 如何在更改字体时获得固定的文本小部件大小,而grid_propagate不给出结果。
  3. 同样的 window 如何再次完全调整大小(权重)

谢谢

import tkinter as tk
from tkinter import *
from tkinter import ttk, font


class TextInsideNotebook:
    def __init__(self, main):
        self.main = main
        self.fontSizePx = -20

        # Font
        self.fontspecs = font.Font(family="consolas", size=self.fontSizePx)

        # Notebook
        self.tab = ttk.Notebook(main, width=800, height=600)
        self.tab.grid(row=0, column=0, sticky="nsew")

        # Tab
        self.tab_frame = Frame(self.tab)
        self.tab.grid(row=0, column=0, sticky="nsew")
        self.tab.add(self.tab_frame, text='  NEW FILE ')

        # Text Area
        self.textarea = tk.Text(self.tab_frame, font=self.fontspecs)

        self.textarea.grid(row=0, column=0, sticky="nsew")
        self.tab_frame.grid_propagate(False)

        # weights
        main.columnconfigure(0, weight=1)
        main.rowconfigure(0, weight=1)

        # Bind
        self.main.bind('<Control-MouseWheel>', self.new_font_size)

    def new_font_size(self, event):
        if event.delta > 0:
            self.fontSizePx = self.fontSizePx - 2
        else:
            self.fontSizePx = self.fontSizePx + 2

        self.fontspecs.config(size=self.fontSizePx)


if __name__ == "__main__":
    main = tk.Tk()
    agc = TextInsideNotebook(main)
    main.mainloop()

为什么我不能在 Notebook widget(Tab) 里面用 sticky 拉伸 Text widget?

文本确实会粘在您分配给它的区域的边缘。 但是,您没有为self.tab_frame中的任何行或列赋予权重,以便行和列的宽度和高度仅与文本小部件一样。

如果您只是将文本小部件放在框架中,那么使用pack比使用 grid 更容易,因为它只需要一行代码而不是三行:

self.textarea.pack(fill="both", expand=True)

如果您出于某种原因希望坚持使用grid ,则必须为包含文本小部件的行和列赋予非零权重

self.tab_frame.grid_rowconfigure(0, weight=1)
self.tab_frame.grid_columnconfigure(0, weight=1)
self.textarea.grid(row=0, column=0, sticky="nsew")

根据经验,您应该始终在任何具有由grid管理的子项的小部件中至少为一行和一列提供正的非零权重。

如何在更改字体时获得固定的文本小部件大小

我的建议是给小部件一个小尺寸,比如 1x1,然后让几何管理器( packplacegrid )拉伸它以适应分配给它的空间。

self.textarea = tk.Text(..., width=1, height=1)

同样的 window 如何再次完全调整大小(重量)?

我不明白这个问题。 它永远不会调整大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM