Как создать виджет календаря в Ruby TK - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь создать виджет календаря в Ruby Tk со следующим кодом:

require 'tk'
require 'tkextlib/iwidgets'

DEBUG = []

begin
    root = TkRoot.new {title 'Ruby/Tk Calendar'}

    cal = Tk::Iwidgets::Calendar.new(root) {
       outline 'black'
       weekdaybackground 'gray90'
       weekendbackground 'white'
       command {p cal.get}
    }
    cal.pack('pady'=>10)
    cal.show('11/1/2006')

    # Set initial window geometry; i.e., size and placement.
    win_w, win_h = 250, 195
    # root.minsize(win_w, win_h)
    win_lf = (root.winfo_screenwidth - win_w) / 2
    root.geometry("#{win_w}x#{win_h}+#{win_lf}+50")

    # Set resize permissions.
    root.resizable(false, false)

    # Make Cmnd+Q work as expected.
    root.bind('Command-q') {Tk.root.destroy}

    Tk.mainloop
ensure
    puts DEBUG unless DEBUG.empty?
end

Однако я получаю следующие сообщения:

can ' t найти пакет Itk (RuntimeError)

TkPackage не может найти пакет Itk (RuntimeError)

Я уже установил пакет tcl, но все еще не работает , Я использую Fedora 31 с ruby 2.6.5.

1 Ответ

1 голос
/ 22 февраля 2020

В этом ответе будет установлена ​​последняя версия Ruby (на момент написания) вместе с последней совместимой версией Tcl.

Примечание: после установки Ruby 2.7.0, $ gem install tk говорит: «Tcl / Tk8.6 не поддерживается [;] он не будет работать правильно». Поэтому вместо этого мы должны ограничить использование Tcl версией 8.5. Мы сделаем это, установив ActiveTcl версии 8.5.

Эти шаги предназначены для Debian Stretch, то есть для Fedora 31, YMMV. :)

Создайте несколько каталогов:

$ mkdir ~/install
$ mkdir ~/install/temp
$ mkdir ~/progra

Используя веб-браузер, загрузите ActiveTcl 8.5 из ActiveState. Затем установите его:

$ pushd ~/install/temp
$ tar zxf ~/Downloads/ActiveTcl-8.5*.tar.gz
$ cd ActiveTcl-8.5*
$ ./install.sh

Ответьте на вопросы по установке:

Please specify the installation directory.
Path [/opt/ActiveTcl-8.5]: ~/progra/ActiveTcl-8.5

Please specify the directory for the demos.
Path [~/progra/ActiveTcl-8.5/demos]: 

Please specify the runtime installation directory.
Path [~/progra/ActiveTcl-8.5]:
$ echo 'export PATH="$HOME/progra/ActiveTcl-8.5/bin:$PATH"' >> ~/.bashrc
$ echo 'export MANPATH="$HOME/progra/ActiveTcl-8.5/bin/man:$MANPATH"' >> ~/.bashrc

Установите некоторые системные пакеты, необходимые для rvm:

$ sudo apt-get install curl dirmngr gnupg

Установите rvm (Ruby enVironment Manager), выполнив следующие действия в соответствии с инструкциями :

$ \curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles
$ echo '# Add RVM to PATH for scripting. Make sure this is the last PATH variable change.' >> ~/.bashrc
$ echo 'export PATH="$PATH:$HOME/.rvm/bin"' >> ~/.bashrc
$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*' >> ~/.bashrc
$ exit

Проверьте и используйте rvm:

$ type rvm | head -n 1 # It should say, 'rvm is a function'.
$ rvm list known
$ rvm install 2.7.0 --enable-shared --enable-pthread --with-tk --with-tcl

Установите системный пакет, необходимый для гема Tk:

$ sudo apt-get install libx11-dev

Установите гем Tk и проверьте установку Tk:

$ gem install tk
$ ruby -W0 -e "require 'tk'; p Tk::TK_PATCHLEVEL"
$ ruby -W0 -e "require 'tk'; require 'tkextlib/iwidgets'; p 'ok'"

Теперь, когда Запускаю вашу программу, вижу виджет календаря.

...