Если текст меняет размер, то виджет и меняет размер - PullRequest
0 голосов
/ 07 июня 2018

Первая попытка .Здесь вы можете увидеть, как шрифт меняет размер, а текстовый виджет меняет размер.Мне нужен текстовый виджет, чтобы сохранить его размер.Я попытался создать текстовый виджет в рамке и сделать frm.grid_propagate (False).результат, который вы видите во второй попытке 1005 *.Во второй попытке виджет теперь мог только уменьшаться, но не мог увеличиваться.Но когда размер шрифта большой, текст печатается за пределами границы текстового виджета, и он не виден

from tkinter import*
import tkinter as tk
def fontUp():
    global count
    if text.tag_ranges('sel'):
        text.tag_add('colortag_' + str(count), SEL_FIRST,SEL_LAST)
        text.tag_configure('colortag_' + str(count),font='Area 35')
        count+=1
    else:    
        text.configure(font='Area 30')

count=0    
root = tk.Tk()
root.geometry("800x800")

frm = tk.Frame(root, height = 300, width = 500)
frm.grid(row = 0, column = 0)
frm.grid_propagate(False)

text = tk.Text(frm, height = 20, width = 50)
text.grid(row = 0, column = 0)

btn = tk.Button(root, text="Font bigger", command = fontUp)
btn.grid(row = 2, column = 0)

Этот код имеет ту же ошибку, что и моя вторая попытка .

Когда мы нажимаем на кнопку, размер текста увеличивается, а виджет также увеличивается.Но у меня есть функция 'fontUp', которая только увеличивает выделенный текст. Функция работает следующим образом: сначала выделите текст, затем нажмите на кнопку, и текст увеличится, но виджет не увеличится, это то, что мне нужно.Как сделать так, чтобы текст менял свой размер, а виджет не менял его размер

1 Ответ

0 голосов
/ 07 июня 2018

Для меня лучшее решение - установить размер виджета равным 0 или 1, а затем позволить управлению геометрией заставить окно увеличиваться или уменьшаться, чтобы соответствовать рамке.Это работает, потому что изменение шрифта влияет только на желаемый размер окна, а не на фактический размер, а желаемый размер зависит от ширины и высоты.Фактический размер контролируется вмещающей рамкой.

В следующем примере я использую pack для текстового виджета.Он также работает с grid, но требует дополнительной пары строк кода для определения веса строк и столбцов.Поскольку текстовый виджет является единственным виджетом в содержащей рамке, pack проще в использовании.

frm = tk.Frame(root, height = 300, width = 500)
frm.grid(row = 0, column = 0)
frm.pack_propagate(False)

text = tk.Text(frm, height = 0, width = 0)
text.pack(fill="both", expand=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...