Troubleshooting SK1 v.0.9.3 Pada Slackware 14.1 64bit - DHOCNET Blog

Troubleshooting SK1 v.0.9.3 Pada Slackware 14.1 64bit

Troubleshooting SK1 v.0.9.3 Pada Slackware 14.1 64bit

SK1 merupakan software grafis berbasis vector yang ditulis menggunakan toolkit WxWidget dan telah mendukung format file Corel Draw yang ber-ekstensi *.CDR.

Pada halaman download Sk1 di sk1project.org/modules.php?name=Products&product=sk1&op=download, disana hanya terdapat 2 (dua) jenis file binari/ installer. Yaitu paket DEB dan RPM. Plus 1 (satu) paket kode sumber. Yang berarti tidak ada file installer untuk Slackware Linux.

Walaupun saya menyinggung tentang paket installer paket SK1, saya tidak akan membahas tentang proses instalasinya disini. Kalau Anda tertarik dan ingin mengetahui proses instalasi paket SK1 pada Slackware 14.1 64bit, silahkan baca online di man.dhobbie.net/2016/05/instalasi-sk1-pada-slackware-141-64bit.html atau download PDF book-nya di dwl.dhobbie.net/2016/05/pdf-book-instalasi-sk1-pada-slackware.html untuk dibaca offline.

Troubleshooting yang saya maksudkan disini adalah tentang penanganan masalah yang terjadi saat menjalankan SK1. Ya, saat dijalankan, sesaat setelah proses instalasi selesai, SK1 tidak segera terbuka dan saat dijalankan melalui terminal emulator, SK1 menampilkan pesan kesalah seperti ini:

UnboundLocalError: local variable 'sys' referenced before assignment

Perhatikan gambar berikut untuk informasi detailnya:


Bila diikuti, kesalahan terdapat pada file Tkinter.py yang berada di /usr/lib64/python2.7/lib-tk, pada baris 1748 dan berada dalam fungsi __init__.

Kesalahan mengarah pada baris kode yang berbunyi:

if not sys.flags.ignore_environment:

Dilihat dari pesan kesalahan yang berbunyi “local variable 'sys'” dengan baris kode yang tertulis “if not sys.flags.ignore_environment” sangat tidak masuk akal karena pada baris kode yang dimaksudkan itu merupakan sebuah perintah perbandingan yang nilainya diambil dari module sys. Sedangkan pada pesan kesalahan tersebut menyatakan bila sys dikenali sebagai sebuah variable.
Untuk lebih jelasnya, mari kita buka file Tkinter.py yang bermasalah.


Dari baris 1748, geser kembali ke baris atas secara perlahan sampai bertemu dengan induk blok fungsi/ kelas.

Class Tk(Misc, Wm):“, baris ini adalah induk dari blok fungsi/ kelas yang mengalami kesalahan.


Kemudian pada baris “def __init__(self, screenName=None, baseName=None, className='Tk', useTk=1, sync=0, use=None):” adalah fungsi yang mengalami kesalah dan fungsi __init__ ini disebutkan pada pesan error saat menjalankan SK1.


Turun ke bawah lagi dan coba perhatikan kode berikut:


Blok kode diatas, dimulai dari “if baseName is None:”, pada baris dibawahnya menyatakan perintah “import sys, os” yang berarti adalah sebuah perintah untuk memuat module sys dan os. Kemudian pada baris dibawahnya terdapat variable yang bernama baseName dan ext yang menggunakan dua module tersebut (sys dan os yang berbunyi os.path.basename(sys.argv[0]) dan os.path.splitext(baseName)).
Bila diperhatikan lagi, pada baris diatas blok kode “if baseName is None:”, sama sekali tidak terdapat perintah import. Terutama untuk module sys.


Dan perhatikan lagi keseluruhan blok kelas/ fungsi yang bermasalah.


Kode diatas telah saya warnai untuk menandai tiap blok fungsi agar pemecahan masalah semakin mudah.

Saya menggunakan 3 (tiga) warna dasar pada gambar diatas. Yaitu kuning, merah dan hijau. Warna kuning adalah deklarasi kelas suatu program yang digunakan untuk menyimpan sub-fungsi.

Lalu warna merah. Blok pada warna merah ini merupakan blok fungsi yang mengalami masalah.

Sedangkan blok lainya yang saya beri warna hijau adalah blok pemroses/ eksekutor suatu fungsi.

Tiap-tiap blok yang saya warnai berbeda, mereka memiliki ruang kerja sendiri dan tidak terhubung satu sama lain kecuali blok yang berada diatasnya dan blok dipanggil secara spesifik pada baris kode.

Itu berarti, baris kode “if not sys.flags.ignore_environment:” mencoba mendapatkan hasil dari module sys yang tidak di-import sebelumnya oleh blok kelas Tk ataupun blok fungsi __init__ yang menghasilkan kesalahan karena akhirnya, sys dikenali sebagai variable yang belum di-definisikan yang dikarenakan module tersebut tidak di muat/ import sebelum fungsi “if not sys.flags.ignore_environment:” dijalankan.
Maka, untuk memperbaiki kesalahan tersebut, kita hanya perlu memindahkan baris kode “import sys, os” yang sebelumnya berada dibawah kode “if baseName is None:” menjadi di atas kode “if baseName is None:” seperti berikut.


Simpan lalu coba jalankan lagi program SK1 dari KMenu.



Ternyata program dapat berjalan normal kembali setelah memindahkan satu baris kode tadi.

Sekian dan maaf bila penjelasan terlalu panjang dan njelimet, rumit dan susah untuk dimengerti. Saya harap Anda memakluminya karena saya memang bukanlah seorang programmer dan melakukan sesuatu berdasarkan naluri seorang selaki, ☺

Semoga bermanfaat, 
Please write your comments