Как прочитать значение параметра заполнения виджетаPython

Программы на Python
Ответить
Anonymous
 Как прочитать значение параметра заполнения виджета

Сообщение Anonymous »

Вот пример программы, которая устанавливает для метки два параметра: текст и отступ.

Код: Выделить всё

import tkinter as tk
import tkinter.ttk

root = tk.Tk()
root.geometry("300x200")
label = tk.ttk.Label(root, background="red")
label.pack()

label.configure(text="Label")
print(label.configure("text")[-1])

label.configure(padding=(100, 50))
print(label.configure("padding")[-1])

root.mainloop()
Изображение
Глядя на вывод печати, параметр text был возвращен в виде строки «Метка», как и ожидалось. Однако дополнение, несмотря на то, что оно установлено в кортеж целочисленных значений, теперь возвращается как кортеж «пиксельных объектов»:

Код: Выделить всё

Label
(, )
Что это за объекты? Я использую неправильный метод для чтения значений? Есть ли встроенный метод для анализа этих объектов, который мне следует использовать?

Исследуя Интернет, я нашел несколько разных методов чтения параметров виджета, но все они дают один и тот же результат:

Код: Выделить всё

>>> label.configure("padding")[-1]
(, )
>>> label.cget("padding")
(, )
>>> label["padding"]
(, )
Дальнейшее исследование «пиксельных объектов»:

Код: Выделить всё

>>> type(label.configure("padding")[-1][0])

>>> dir(label.configure("padding")[-1][0])
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'string', 'typename']
Моя система для результатов, указанных выше, работает:

Код: Выделить всё

>>> sys.version
'3.9.2 (default, Feb 28 2021, 17:03:44) \n[GCC 10.2.1 20210110]'
>>> tk.Tcl().call("info", "patchlevel")
'8.6.11'
Переключение на другую систему:

Код: Выделить всё

>>>> sys.version
'3.11.13 (413c9b7f57f5, Jul 03 2025, 18:03:56)\n[PyPy 7.3.20 with GCC 10.2.1 20210130 (Red Hat 10.2.1-11)]'
>>>> tk.Tcl().call("info", "patchlevel")
'8.6.14'
Теперь я получаю другое возвращаемое значение, которое представляет собой просто кортеж целых чисел:

Код: Выделить всё

>>>> label.configure("padding")[-1]
(100, 50)
Поскольку версия, очевидно, влияет на возвращаемые значения, не было бы еще более разумным иметь абстрактный встроенный метод для анализа этих значений?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»