LINUX.ORG.RU

[Tcl/Tk] Пользовательские кнопки


0

1

Приветствую всех.

Есть необходимость в создании кнопок нестандартного размера — они должны быть значительно больше, чем обычные, чтобы с ними было удобно работать через сенсорную панель. Я пытался для этих целей использовать TkZinc (рисовал прямоугольники, потом заставлял их реагировать на события). В принципе, заработало, но мне такой подход не нравится двумя моментами: во-первых, сама процедура создания элемента муторная, и во-вторых, я так и не победил проблему с кириллицей. Посоветуйте, пожалуйста, есть ли возможность более-менее стандартным способом увеличить размер кнопок?

Кстати, кнопки должны быть в виде матрицы, соответственно, лучше всего использовать grid — но там нет свойства expand, а его имитация с помощью rowconfigure у меня не получается.

Ответ на: комментарий от anonymous

button .bt1 ... -width 15 -height 15 grid .bt1

Да это-то понятно. Но некрасиво. Layout manager-ы ведь для того и нужны, чтобы не указывать размеры в пикселях. Ну и потом — я хочу запускать программу в kiosk mode, а если у меня монитор 19-дюймовый, и я подгоню размеры в пикселях под него, а у заказчика окажется 17-дюймовый, то выйдет неприятно.

decadent
() автор топика
Ответ на: комментарий от anonymous

Ты сам придумал что это в пикселях?

Specifies a desired width for the button. If an image or bitmap is being displayed in the button then the value is in screen units (i.e. any of the forms acceptable to Tk_GetPixels). For a text button (no image or with -compound none) then the width specifies how much space in characters to allocate for the text label. If the width is negative then this specifies a minimum width. If this option is not specified, the button's desired width is computed from the size of the image or bitmap or text being displayed in it.

Ну в символах. Какая разница-то? Мне нужно, чтобы кнопка автоматически занимала все доступное для нее место. При использовании pack это достигается опциями -fill и -expand — но pack неудобен, если кнопки должны быть расположены в виде матрицы.

decadent
() автор топика
Ответ на: комментарий от ky-san
 
button .bt1 -text "Schlißen" -command exit  -padx 50 -pady 50

И чем мне это поможет? Эти самые величины как вычислять — как к Visual Basic — вручную?

decadent
() автор топика
Ответ на: комментарий от decadent

И чем мне это поможет? Эти самые величины как вычислять — как к Visual Basic — вручную?

> Посоветуйте, пожалуйста, есть ли возможность более-менее стандартным способом увеличить размер кнопок?

Тебе посоветовали, всё увеличивается, и показали, «куда писать». Что не так? Прямоугольники ты свои рисовал, значит размеры уже считаешь.

Ещё ты можешь попробовать играться с DPI.

ky-san
()
Ответ на: комментарий от ky-san

Вот тут нашел пример того, что мне нужно — действительно, правильно использовать rowconfigure и columnconfigure, просто я передавал им неправильные параметры.

decadent
() автор топика
Ответ на: комментарий от ky-san

Поздравляю с решением проблемы. Кстати, почему ты выбрал Тк?

Спасибо.

В Tcl/Tk мне нравится несколько вещей:

  • Кроссплатформенность. Это прежде всего, потому как часто приходится писать для винды.
  • Очень простая работа с ком-портом, без кучи плохо документированных констант и шаманских плясок (снова-таки, применительно к виндам, в *nix с этим значительно проще).
  • Идеология «все — строка», вследствие чего можно, с одной стороны, делать очень гибко настраиваемый графический интерфейс, а с другой стороны — получаются очень простые процедуры расшифровки моих данных.
  • Еще одно следствие из идеологии «все — строка» — метапрограммирование. Конечно, я не настолько крут, чтобы использовать все его возможности — но некоторые вещи очень облегчают жизнь.
  • Ну и кроме всего прочего — язык прост, как двери, но в то же время невероятно мощен. Плюс куча наработок, которые тестировались годами.

Конечно, большой минус в том, что некоторые библиотеки очень медленно портируются под новые версии языка. Но пока мне хватает того, что есть.

decadent
() автор топика
Ответ на: комментарий от decadent

правильное решение проблемы - задавать размеры кнопок (и прочие визуальные аттрибуты виджетов) через ресурсы Tk. Жёстко прописывать в коде -padx -width и тому подобное только в случае крайней необходимости.

для сенсорного экрана просто сделаете ещё один файл с ресурсами и вся недолга :)

MKuznetsov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.