#python #tkinter #tk
#питон #tkinter #тз
Вопрос:
Я знаю, что вы можете заставить фреймовые виджеты расширяться и заполнять всю доступную им область в их контейнере с помощью этих команд: frameName.pack(fill = 'both', expand = True)
Что бы сделать то же самое для размера шрифта текста? В настоящее время мой текст является атрибутом виджета label. Родительским элементом виджета label является frameName
.
Думаю, я мог бы определить свою собственную функцию для вызова labelName.config(fontsize = N)
обновления размера шрифта по мере увеличения фрейма, но я не уверен, как их соотнести.
Вот как выглядит моя программа прямо сейчас: каждый из этих блоков представляет собой фреймовый виджет. Я бы хотел, чтобы текст расширялся, чтобы заполнить в некоторой степени фрейм, а также реагировать на изменение размера окна.
Ответ №1:
Вы можете использовать tkFont.font
Когда вы инициализируете метку, задайте шрифту значение переменной, например:
self.font = SOME_BASE_FONT
self.labelName.config(font = self.font)
Затем вы можете использовать:
self.font = tkFont.Font(size = PIXEL_HEIGHT)
Это можно масштабировать до высоты метки. Вы можете привязать '<Configure>'
событие к виджету и настроить функцию обратного вызова на изменение размера метки.
frameName.bind('<Configure>', self.resize)
def resize(self, event):
self.font = tkFont(size = widget_height)
Для получения дополнительной информации см. Документацию здесь .
Комментарии:
1. хорошо, большое спасибо за ответ. Единственное, чего я не понимаю, так это этого
<Configure>
синтаксиса и того, что он делает.2. Извините, что ответил так поздно. <Configure> определяет событие. для получения дополнительной информации вы можете посмотреть здесь: effbot.org/tkinterbook/tkinter-events-and-bindings.htm
3.
size
Параметр принимает высоту в точках , а не в пикселях. Чтобы размер интерпретировался как пиксели, вам нужно использовать отрицательные значения.
Ответ №2:
Я пытался выяснить, как заставить текст автоматически изменять размер в tkinter.
Ключом к тому, чтобы заставить его работать для меня, было присвоение вычисленной высоты размеру в пользовательском объекте шрифта. Вот так: self.label_font['size'] = height
Полный пример:
from tkinter import font
import tkinter as tk
class SimpleGUIExample:
def __init__(self, master):
self.master = master
self.master.title("A simple Label")
self.master.bind('<Configure>', self.resize)
self.label_font = font.Font(self.master, family='Arial', size=12, weight='bold')
self.label = tk.Label(self.master, text="Simple Label Resizing!")
self.label.config(font=self.label_font)
self.label.pack(fill=tk.BOTH, expand=tk.YES)
self.close_button = tk.Button(self.master, text="Close", command=master.quit)
self.close_button.pack()
def resize(self, event):
height = self.label.winfo_height()
width = self.label.winfo_width()
height = height // 2
print('height %s' % height)
print('width %s' % width)
if height < 10 or width < 200:
height = 10
elif width < 400 and height > 20:
height = 20
elif width < 600 and height > 30:
height = 30
else:
height = 40
print('height %s' % height)
self.label_font['size'] = height
print(self.label_font.actual())
root = tk.Tk()
simple_gui = SimpleGUIExample(root)
root.mainloop()