Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Tkinter: выровнять тексты в 2 виджетах [RSS Feed]

#1 Март 26, 2017 08:13:53

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

Привет!

У меня есть GUI, построенный из 2 виджетов типа tk.Text. Оба виджета одинаковых размеров, только один упакован слева, другой - справа.

В обоих виджетах разные тексты с разным числом символов, но одинаковым числом абзацев. Мне нужно выровнять оба виджета так, чтобы абзацы с одинаковым номером были визуально выровнены по горизонтали. Нужно сделать примерно так, как в сравнивателях текстов, например, kdiff:



Позиции известны, mark установлены. Пробовал разные комбинации с yview - не получилось.

Отредактировано vanvanov (Март 26, 2017 08:16:50)

Офлайн

#2 Март 26, 2017 15:16:34

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

vanvanov
Мне нужно выровнять оба виджета так, чтобы абзацы с одинаковым номером были визуально выровнены по горизонтали. Нужно сделать примерно так, как в сравнивателях текстов, например, kdiff:
делайте, кто вам мешает?
vanvanov
Позиции известны, mark установлены. Пробовал разные комбинации с yview - не получилось.
Сейчас вызовем телепата, он усилем мысли считает ваш код, также прочитет ваши мысли о том какие варианты с yview вы уже пробовали и выложит это все сюда и тогда может ктото чтото и ответит по существу.
А пока исходного кода нет,никто не знает как у вас там все устроено,и как оно у вас работает, отвечать вам всеравно что писать письмо “на деревню дедушке”



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 26, 2017 15:20:07)

Офлайн

#3 Март 26, 2017 21:27:22

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

PEHDOM
делайте, кто вам мешает?
Отлично, и каким образом?
PEHDOM
о том какие варианты с yview вы уже пробовали
Их всего 2, насколько я понял из руководства, yview_scroll и yview_moveto.
PEHDOM
А пока исходного кода нет,никто не знает как у вас там все устроено,и как оно у вас работает
Ну, вы сами просили. Клонируйте репозиторий с помощью
 git clone git://github.com/sklprogs/shared.git
Скачайте пример кода на этой странице.


Получается вот это:

Мне нужно, чтобы текст, отмеченный жирным, был выровнен горизонтально. Размер шрифта придется вручную считать?

Отредактировано vanvanov (Март 26, 2017 21:30:21)

Офлайн

#4 Март 27, 2017 09:24:42

MrViktor
Зарегистрирован: 2017-03-09
Сообщения: 83
Репутация: +  8  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

vanvanov
В обоих виджетах разные тексты с разным числом символов, но одинаковым числом абзацев. Мне нужно выровнять оба виджета так, чтобы абзацы с одинаковым номером были визуально выровнены по горизонтали.
Вам нужно описать алгоритм действий или что?
По описанию проблемы, я понимаю, что нужно только “описать алгоритм”.
Берем первый файл и считаем количество абзацев, для каждого абзаца в переменную записываем позицию его начала (номер строки). Так же поступаем со вторым файлом. Дальше пишем код синхронизации по позиции и номеру абзацев, разницу в строках компенсируем пустой строкой.

Офлайн

#5 Март 27, 2017 10:34:41

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

MrViktor
Согласно условию задачи, число абзацев (строк) одинаковое, т.е. надо выровнять тексты по горизонтали с метками, например, ‘10.0’ в 1-м окне и ‘10.0’ в 2-м окне. Проблема в том, что абзацы имеют разную длину.

Я, кажется, стал понимать, в чем дело. yview выводит указанную метку на 1-ю видимую строчку, и оба текста оказываются выровненными. Но если метка находится слишком близко к началу или к концу текста (как на скриншоте), то выровнять не получится, потому что текстовый виджет нельзя скроллить за пределами текста. Соответственно, у меня 2 вопроса:

1) как сделать так, чтобы yview отображал нужную метку по центру, а не в самом вверху?
2) что делать, если метка находится слишком близко к началу или концу? Вставлять пустые строки в начало и конец? Использовать tk.Canvas вместо tk.Text?

Офлайн

#6 Март 27, 2017 11:15:49

MrViktor
Зарегистрирован: 2017-03-09
Сообщения: 83
Репутация: +  8  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

vanvanov
Согласно условию задачи, число абзацев (строк) одинаковое, т.е. надо выровнять тексты по горизонтали с метками, например, ‘10.0’ в 1-м окне и ‘10.0’ в 2-м окне. Проблема в том, что абзацы имеют разную длину.
Брррр…. Так я вам уже про это и написал… абзац и строка - все таки разные вещи.
Tkinter Listbox - имеет длину строки (ширину), которая устанавливается width (количество символов), то есть если у вас ширина ListBox равна 20 символов, а вы впихиваете текст длинной 100 символов, то текст в листбоксе займет 5 строк. Вот от этого и надо плясать, как я уже и писал разницу в строках компенсировать пустыми строками, сам листбокс этого не сделает.
Покрайней мере на ваших скриншотах я вижу именно эту проблему.
И про какие метки вы все говорите?

Отредактировано MrViktor (Март 27, 2017 11:16:51)

Офлайн

#7 Март 27, 2017 11:28:58

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

MrViktor
если у вас ширина ListBox равна 20 символов, а вы впихиваете текст длинной 100 символов, то текст в листбоксе займет 5 строк. Вот от этого и надо плясать, как я уже и писал разницу в строках компенсировать пустыми строками, сам листбокс этого не сделает.
У меня tk.Text, а не tk.Listbox. Строки слишком длинные, чтобы пытаться впихнуть их в Listbox.
MrViktor
И про какие метки вы все говорите?
Которые используются при yview. Например,
 mark = 'red'
postk = '10.0'
widget.mark_set(mark,postk)
widget.yview(mark)
Соответственно, yview('10.0') в 1-м tk.Text и yview('10.0') во 2-м tk.Text не гарантирует, что строчки в обоих tk.Text будут выровнены по верхней границе.

Отредактировано vanvanov (Март 27, 2017 11:31:02)

Офлайн

#8 Март 27, 2017 12:18:56

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

пока писал, тема обновилась удалил.

vanvanov
1) как сделать так, чтобы yview отображал нужную метку по центру, а не в самом вверху?
2) что делать, если метка находится слишком близко к началу или концу? Вставлять пустые строки в начало и конец? Использовать tk.Canvas вместо tk.Text?
Вот наконецто хоть какойто конкретный вопрос, и почему мы это должны из вас клещами вытаскивать?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 27, 2017 12:23:30)

Офлайн

#9 Март 27, 2017 12:37:05

MrViktor
Зарегистрирован: 2017-03-09
Сообщения: 83
Репутация: +  8  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

vanvanov
У меня tk.Text, а не tk.Listbox
Да, это я уже глючу (в голове своих проблем вагон), в tk.Text вроде тоже настройка на длину строки имеется
vanvanov
1) как сделать так, чтобы yview отображал нужную метку по центру, а не в самом вверху?
Высчитывать середину tk.Text и скролинг делать с учетом смещения на середину (это что на ум приходит).
Я дальше не объясню (с tk мало знаком).
Выложили бы небольшой свой рабочий проект, где можно всю проблему увидеть визуально. Так гораздо быстрее вам помогут.

Отредактировано MrViktor (Март 27, 2017 12:47:27)

Офлайн

#10 Март 27, 2017 13:59:10

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Tkinter: выровнять тексты в 2 виджетах

PEHDOM
Вот наконецто хоть какойто конкретный вопрос, и почему мы это должны из вас клещами вытаскивать?
Потому что не была ясна причина, по которой текст нормально не выравнивался. А ответы на конкретные вопросы обычно находятся в поисковике.
MrViktor
Выложили бы небольшой свой рабочий проект, где можно всю проблему увидеть визуально. Так гораздо быстрее вам помогут.
Наверху ссылки есть.

Офлайн

  • Начало
  • » GUI
  • » Tkinter: выровнять тексты в 2 виджетах[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version