Tkinter - Spinbox выглядит длиннее, чем ожидалось - PullRequest
0 голосов
/ 14 января 2019

Запуск Python3.7, загруженного с python.org на MacOS Mojave.

Я использую следующий код для выравнивания Spinbox и Scale для управления одной и той же переменной. Тем не менее, внешний вид не то, что я ожидал:

import tkinter as tk

root = tk.Tk()
mainframe = tk.Frame(root)

# Model

input = tk.DoubleVar(value=0.)
# input = tk.IntVar(value=0)
spin = tk.Spinbox(mainframe, textvariable=input, wrap=True)
slide = tk.Scale(mainframe, variable=input, orient='horizontal')
spin['to'] = 1.0
spin['from'] = 0.0
spin['increment'] = 0.01
slide['to'] = 1.0
slide['from'] = 0.0

# spin['to'] = 100
# spin['from'] = 0
# spin['increment'] = 1
# slide['to'] = 100
# slide['from'] = 0

# Layout

weights = {'spin': 1, 'slide': 1000}

mainframe.grid_rowconfigure(0, weight=1)
mainframe.grid_columnconfigure(0, weight=weights['spin'])
mainframe.grid_columnconfigure(1, weight=weights['slide'])
spin.grid(row=0, column=0, sticky='news')
slide.grid(row=0, column=1, sticky='news')

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
mainframe.grid(row=0, column=0)

root.mainloop()

Я ожидаю, что Scale займет больше места, чем Spinbox, но получается наоборот.

Result

Я думал, что, может быть, это потому, что я использовал DoubleVar, где строка могла бы стать длинной из-за десятичной проблемы, но IntVar дает мне тот же результат. Смотрите закомментированные блоки кода.

Что не так? Как я должен получить короткую Spinbox и длинную Scale из этой ситуации? Это специфично для macOS, где ОС накладывает минимальные размеры на виджеты?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Некоторые виджеты tkinter имеют значения по умолчанию для некоторых своих атрибутов.

A Spinbox имеет ширину по умолчанию 20символьных единицах ), если не указано иное.

A Scale имеет длину по умолчанию 100пикселей ), если не указано иное.

Так вот почему вы заставляете Spinbox быть таким большим и Scale относительно маленьким.

Чтобы исправить это, вы можете указать их сами, как в:

spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, <b>width=1</b>)
slide = tk.Scale(mainframe, variable=input, orient='horizontal', <b>length=200</b>)

Result

0 голосов
/ 14 января 2019

Вы можете установить ширину Spinbox. Например:

spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, width=5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...