LINUX.ORG.RU
ФорумTalks

[Непонятно же] Tk


0

0

В стандартной поставке многих скриптовых языков (например: perl, python, ruby, ...) программирования идут биндинги к библиотеке Tk.

Что в ней хорошего? Страшный внешний вид, феерические тормоза (по сравнению с gtk или Qt). Чем она так притягивает, тем, что тупо проще прикрутить?

Тред создан не ради флейма, дело в том, что я стою перед выбором gui toolkit для небольшой программы (у нас тут летняя производственная практика), и стараюсь решить проблемы малой кровью (тащить минимум зависимостей).

Вообще, какие впечатления остались от использования Tk?

★★

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

>То-то ты питон расхваливаешь...

почему бы и нет?

>Это чтобы его с C не перепутать.

ну, знаний С от тебя может требовать только умалишенный, так что не бойся

>А сюда он по размеру не влезает? :)

можно попробовать. Комментарии не вырезал =)

H4sIAEJLc0gAA71Wy27sNgzd+yuI2YyNukaQZYCsii6KPlC0KS6KIAhkmR6rsSVXkjMZFP33kpLl
RzL3Au2iWiRji6LIcw5JHw6HT8LLDi0Mppl6LKG+wPfi65+VPsHviJDf3sKP4gK3Nzc3RZVlD51y
sy2oYexxQO0d4Cv9g07opueTRkOrenQVwIOByZGtL0FaFB5BZOlOU/+BkjboGFg8KefppRR9Xwv5
4tiL7xCS9Vn5Lrw484u8yAb0nWnojk8danIgmksZjgerk8kLiCbgDTgvrA8bg1AaemPG6nA4ZBll
YWjHYU+xZJnshXPwqzdjuJeyucuAFtl+s0Q2ECJWKMrLMx74JnH0iuM19KCu3cM+RnKdbpizWpwH
YOPWaM2ratAFL6JWvfIX9nwdIgY64u+q4OxbITtQmhLWEunQaNEFkozmoMaRGWqtGbZH2f/iNgLD
vhps4flZaeWfn3OCqC1iwLz4sWLU0Tq4h7/+3u+crfLXd9DaoJTru42Snt8/5gd7KHe3FCXkh3N6
OV9QlMv5/coPmEw3NxZPa2ZRSGxRRu1iuYBQssrR3VMQm5wJmF8SC2KxZRpERDO6gdZYcCNK1Sps
duzweiBej9HyCMKeJi6iIKoak6NYG0B+hL6kp6gM4m9xRdaC6qKdejjyOU2qPybZ50GdSst+Yjk5
I1/Qu6KaIwgJHldXKRA6I6heLOtEGu1Jx/wzxNEGUcpOEHeBn8AHRUlgL5643ELyJNtOxGpYsHKd
mfqGM6UbTie0BNCZC5itOIXFTY3SDBQ3sy9qJocpj7/oRtTSTDpoTGggio0tyZZv9uoV+8s7wFME
x00IBN+kZSxdjhTf+HSohjrGzNERwGtuHRe9pdaY8HKQn2MxrypiaIul7nm1DWk6bleJqHXThAZM
B1n9xNimFO528lZtMGSTQN9dOPHYNk/kPn8v4mLV+qSvqf0zGv9NL72GWd/1m1mfHDJj8W9VvsN+
I3SeAf5LqpwPzoIMzSygZvHLqvw/WAjRs13VCff8gpe8bQqiBvuFnt35hRUaUpEQrwY0k7//ifLa
c/EDTRAOjeAlgZ3noRSC3fbvgF8sqFC3ibK1O1KtqJ6awIC1aeb5FUsnja+5MWyH37q5+FnGk4A/
J4WeYrrsBl/8GAiTD+C7luzm7LizrM0+CacMh9icKo2Gd/AjWhZfqMmBJeioF+jGhRHK3yi7mtQm
oWCknCwDsGPd28uev3PHyO0GGDfs7dhKz5vRcfdh0NiGe1JJIZOs4hdEFf/lW+cVKcLlnx1UV9c2
mP98fhN88pG4KD44I1Fr4yG3DXxFWdEffCMR15TEywfjIL/G0UBeK6YI9SDGnEVcwuOKzlO5KaXi
I46rR3ZBfq+b8Hrf4gj4qyW2Xcn2SvNbYYhC33/5zV9s2T/V/ehkKAsAAA==

geek ★★★
()
Ответ на: комментарий от gaa

>Причём? При Gtk.

ты дурак? Gtk - это либа. Которую, к слову можно и из тикля дергать

geek ★★★
()
Ответ на: комментарий от robot12

>Редкий случай, однако не согласиться с санычем нельзя.

саныч долго сидел в танке, а секретарша ему видимо забыла передать, что LM есть и в Qt и в Gtk

geek ★★★
()
Ответ на: комментарий от geek

оскорбления традиционно поскипаны.

> можно попробовать. Комментарии не вырезал =)

Ну и как мне это фиготу читать? На base64 вроде непохоже...

> Gtk - это либа. Которую, к слову можно и из тикля дергать

Либа. Со своим видением многих вещей, в т.ч. и замыканий.

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

gaa ★★
()

взял пример из книжки Programming Ruby, 2nd Edition:

% cat >ruby-tk.rb
eveel{~}% cat >ruby-tk.rb            
require 'tk'
class PigBox
  def pig(word)
    leading_cap = word =~ /^[A-Z]/
    word.downcase!
    res = case word
      when /^[aeiouy]/
        word+"way"
      when /^([^aeiouy]+)(.*)/
        $2+$1+"ay"
      else
        word
    end
    leading_cap ? res.capitalize : res
  end
  def show_pig
    @text.value = @text.value.split.collect{|w| pig(w)}.join(" ")
  end
  def initialize
    ph = { 'padx' => 10, 'pady' => 10 }      # common options
    root = TkRoot.new { title "Pig" }
    top = TkFrame.new(root) { background "white" }
    TkLabel.new(top) {text 'Enter Text:' ; pack(ph) }
    @text = TkVariable.new
    TkEntry.new(top, 'textvariable' =>  @text).pack(ph)
    pig_b = TkButton.new(top) { text 'Pig It'; pack ph}
    pig_b.command { show_pig }
    exit_b = TkButton.new(top) {text 'Exit'; pack ph}
    exit_b.command { exit }
    top.pack('fill'=>'both', 'side' =>'top')
  end
end
PigBox.new
Tk.mainloop
eveel{~}% ruby ruby-tk.rb
*** glibc detected *** ruby: free(): invalid next size (fast): 0x09592bb0 ***
======= Backtrace: =========
/lib/libc.so.6[0xb5d7e4]
/lib/libc.so.6(cfree+0x96)[0xb5f846]
{...}
b7d1c000-b7f1c000 r--p 00000000 08:01 6922827    /usr/lib/locale/locale-archive
b7f1c000-b7fa8000 rw-p b7f1c000 00:00 0 
bfda9000-bfdbe000 rw-p bffeb000 00:00 0          [stack]
zsh: abort      ruby ruby-tk.rb

Походу, мэинтейнеры Fedora кого-то не любят.

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

вот как-то так делается, питона рабочего проверить под рукой нету, но должно работать:

from multiprocessing import Process
import subprocess

def read_pipe():
    pipe = subprocess.Popen('find / -name \*.o')
    while pipe.poll():
        print(pipe.stdout)

p = Process(target=read_pipe)
p.start()
p.join()

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

> вот как-то так делается, питона рабочего проверить под рукой нету, но должно работать:

Функции start и join натолкнули меня на мысль о параллельном потоке. Это так?

gaa ★★
()
Ответ на: комментарий от gaa

> Функции start и join натолкнули меня на мысль о параллельном потоке. Это так?

чорт, меня спалили :). Да, там отдельный процесс порождается. event-driven подход в питоне не сильно развит, поэтому или треды или один из кучи питоновских модулей на эту тему(pp, multiprocessing, etc).

Надо было запутаннее программу писать чтобы никто не понял как работает :).

Я только не уверен что подход в tcl прям реально нужен в обычной жизни. Да, он чем-то проще, но, если надо сделать отдельно event loop и отдельно основной поток то в питоне это не проблема, просто это надо делать явно.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

> event-driven подход в питоне не сильно развит

о чём я и говорил.

> Я только не уверен что подход в tcl прям реально нужен в обычной жизни.

Это уже философия. Но факт то, что он используется.

gaa ★★
()

>В стандартной поставке многих скриптовых языков (например: perl, python, ruby, ...) программирования идут биндинги к библиотеке Tk

потому что создатели этих скриптовых языков - умные люди

>Что в ней хорошего?

всё, для чего она создавалась

>феерические тормоза (по сравнению с gtk или Qt)

а на этом месте поподробнее, желательно с конкретными примерами. иначе - 4.2

>Тред создан не ради флейма

4.2. если бы ты создавал его не ради флейма, то в твоём посте было бы куда меньше тупых и необоснованных наездов

>Вообще, какие впечатления остались от использования Tk?

лучший GUI Toolkit из всех, которые я знаю. активно использую в разработке, в том числе и для embedded-систем. малый футпринт (особенно в eTcl), хорошая производительность (по сравнению с тем же Qt, при всём уважении к троллям), начиная с Tk 8.5 - легко настраиваемый внешний вид

>Чем она так притягивает, тем, что тупо проще прикрутить?

а ты попробуй и сравни

jtootf ★★★★★
()
Ответ на: комментарий от gaa

>Ну и как мне это фиготу читать? На base64 вроде непохоже...

base64 -d | gunzip :)

>Либа. Со своим видением многих вещей, в т.ч. и замыканий.

что значит "со своим" ? И где другое видение, которое можно дергать из любого яп?

>А дёргание её из тикля очень хорошо описывается картинами нашего любимого анального анонимуса.

это потому что тикль заточен под tk. А всё остальное к тиклю прикручивается через жопу.

geek ★★★
()
Ответ на: комментарий от gaa

>о чём я и говорил.

event-driven в питоне делается через либы, те же сигналы gtk, например

для ленивых даже есть autoconnect =)

geek ★★★
()
Ответ на: комментарий от geek

>это потому что тикль заточен под tk

некорректно. тикль заточен под event-driven программирование, создавался он вообще как язык управления процессами в ОС Sprite

>А всё остальное к тиклю прикручивается через жопу

это разве что если руки кривые. у Tk (как и у Tcl) очень простой и удобный C API. было бы сложно прикрутить - не прикручивали бы ко всему подряд

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>некорректно.

корректно. Именно по этому куда чаще tcl/tk, чем tcl

>было бы сложно прикрутить - не прикручивали бы ко всему подряд

так и не прикручивают =) тикль rip

geek ★★★
()
Ответ на: комментарий от eveel

> Один внешний вид чего стоит... Ей богу, Tk и то симпатичее, к тому же - идёт в комплекте :)

Хм, а мне весьма симпатичный.

smh ★★★
()
Ответ на: комментарий от smh

> Хм, а мне весьма симпатичный.

Это субъективно, и правды не найти :) Но меня он отпугивает.

> Кстати, а разве fxruby не идет в комплекте тоже?

Если мне не изменяет память, то нет. FXRuby (http://www.fxruby.org/) ставится отдельно.

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

>корректно. Именно по этому куда чаще tcl/tk, чем tcl 

сразу видно - человек разбирается в вопросе, и думает
прежде чем написать ответ. вот тебе в качестве примеров,
навскидку :

http://til.sourceforge.net/
http://www.msgcourier.com/
http://aolserver.com/

>так и не прикручивают

таки блаженны верующие. но дело твоё, верь во что хочешь

>тикль rip

и в это тоже, да

jtootf ★★★★★
()
Ответ на: комментарий от geek

> event-driven в питоне делается через либы, те же сигналы gtk, например

Какие из них самые нормальные? Я много чего видел, в основном, хлам или какая-то неудачная пародия на libevent.

PS может кто биндинг к libev видел?

true_admin ★★★★★
()
Ответ на: комментарий от gaa

на tcl можно даже в одну строчку :)

fileevent [ set f [ open "|ping 127.0.0.1" {RDONLY NONBLOCK} ] ] readable [ subst -nocommands {if [ catch {puts [ string toupper [ gets $f ] ] } ] { close $f } } ]

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

>Может объяснит кто

Я попробую. Сначала ты вызываешь gtk.main, опосля чего уже не до select-ов. В tk-ом mainloop-е есть опрос зарегистрированных файлов, в gtk-ом, похоже, нет. Т.е. вопрос в написании своего аналога gtk.main со встроенным poll-ом и вызовом ф-й для готовых. Насколько я понимаю, дело 7.py строк, один раз в жизни.

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

> Я попробую. Сначала ты вызываешь gtk.main, опосля чего уже не до select-ов. В tk-ом mainloop-е есть опрос зарегистрированных файлов, в gtk-ом, похоже, нет. Т.е. вопрос в написании своего аналога gtk.main со встроенным poll-ом и вызовом ф-й для готовых. Насколько я понимаю, дело 7.py строк, один раз в жизни.

Ну вообще в GMainLoop можно добавлять GSource в poll сколько влезет. Или о чём речь?

Bohtvaroh ★★★★
()
Ответ на: комментарий от geek

>> Ну и как мне это фиготу читать? На base64 вроде непохоже...

> base64 -d | gunzip :)

Распаковал таки. Всё равно поставленной задачи код не выполняет. Пролёт-с

gaa ★★
()
Ответ на: комментарий от Bohtvaroh

>в GMainLoop можно добавлять GSource в poll сколько влезет. Или о чём речь

Похоже на то. Только найти эту фигню нелегко - даже с таким явным указанием с первого раза не нашёл как:)

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