Tcl / Tk. مستكشف ملف بديل لمنصات Linux و Android

كلما طالت كتابة البرامج المختلفة على tcl / tk ، كلما أعجبت بقدراتها وتفكيرها. ولكن كان هناك شيء واحد لم يمنحني الراحة حتى وقت قريب. عند تطوير واجهة المستخدم الرسومية ، غالبًا ما يتعين عليك استخدام مستكشف الملفات (tk_getSaveFile أو tk_getOpenFile أو tk_chooseDirectory). وإذا تم تحميل مستكشف الملفات الأصلي لهذه الأنظمة الأساسية على أنظمة التشغيل Windows أو OS X ، فيتم تحميل المستكشف من tcl / tk على منصات Linux (حسنًا ، لا يوجد مستكشف أصلي في Linux):



ما الذي لا يناسبك في هذا المستكشف؟ هذا النقص في العمليات الأولية مع المجلدات / الملفات - إنشاء وتدمير وإعادة تسمية. لا ، لا تعتقد في tcl نفسها أن جميع هذه الآليات ، بالطبع ، مطبقة ، فهي ببساطة غير موجودة في واجهة المستخدم الرسومية لـ Explorer. ولكن على لينكس ، هذا ليس ملحوظًا. ولكن على نظام Android الأساسي ، يسبب الموصل من Tcl / Tk الكثير من الإزعاج:



عندما نتحدث عن نظام Android الأساسي ، فإننا نعني تطوير التطبيقات على Androwish .

ثم جاءت هذه الأوقات ، والعزلة الذاتية ، وما إلى ذلك. نتيجة لذلك ، وُلد balalaika ( يسمى أيضًا / حزم لـ tcl) tkfe (مستكشف ملفات tk).

عند تطوير حزمة tkfe ، أخذنا في الاعتبار ليس فقط أن العمليات الأولية على الأقل مع الملفات / الأدلة ضرورية ، ولكن أيضًا الرغبة في وجود مستكشف ليس فقط في نافذة منفصلة ، ولكن أيضًا في إطار منفصل ، والذي يمكن للمستخدم نفسه وضعه كما يشاء في واجهة المستخدم الرسومية الخاصة به. يحتوي المشروع على مثال شامل لاستخدام الحزمة. لذا ، قم بتنزيل المشروع ، وانتقل إلى المجلد ~ // TkFileExplorer / عينات وقم بتشغيل المثال:

$wish tkfe_samplefull.tcl


في الواقع ، يوضح المثال بوضوح جميع ميزات الحزمة. على سبيل المثال ، قم بتشغيل Explorer لتحديد مجلد في نافذة منفصلة:



يحتوي Explorer نفسه على واجهة بلغتين: الروسية والإنجليزية. تتم الترجمة بسرعة عند النقر فوق الزر الذي يحمل العلم:



بالإضافة إلى الزر الذي يحمل العلم ، يوجد زر بأدوات (أدوات) ، عند النقر ، يتم عرض قائمة السياق ، ما يمكن القيام به في الدليل الحالي (إنشاء دليل / ملف) أو مع ملف / مجلد محدد ( حذف / إعادة تسمية):



تقوم أي من وظائف مستكشف الملفات بإرجاع اسم المتغير (التسطير - NAME) (انظر المثال tkfe_samplefull.tcl) ، حيث سيتم كتابة المسار إلى الملف أو الدليل المحدد ، أو الذي سيكون فارغًا إذا تم رفض الاختيار. بعد تلقي اسم المتغير ، يبقى الانتظار حتى يتم الحصول على أي نتيجة ، على سبيل المثال:

 . . .
#   
#   window -  ; frame -  
set typew "window"
#  
 set msk "*.txt *.doc *.crt * .*"
# 
set tekdir $env(HOME)
#  
 set vrr [FE::fe_getopenfile  $typew $w $tekdir $msk]
# 
 vwait $vrr
. . .

إذا كنت تستخدم نوع موضع موصل الإطار ، فأنت بحاجة إلى الاهتمام بوضعه في صورتك. يمكن أن يكون التنسيب بأي شكل من الأشكال (شبكة أو حزمة أو مكان). الطريقة المفضلة هي طريقة المكان. لا داعي للقلق بشأن إعادة تنسيق الصورة ، نظرًا لأن المكان ، على عكس الشبكة والحزمة ، يسمح لك بتراكب الإطار أعلى الصورة الحالية:



إذا نظرت بعناية إلى الصورة ، فستلاحظ أن لقطة الشاشة الصحيحة تختلف عن اليسار بمظهر المجلدات المخفية عليها (تبدأ الأسماء من وجهة). لإظهار الأزرار المخفية ، يجب تمكين الزر برمز على شكل عين. يمكن أيضًا تصنيف المجلدات والملفات أبجديًا ، والملفات حسب الحجم:



عندما يتم وضع المستكشف في الإطار ، يجب عليك أيضًا الاهتمام بحجب الأزرار الدخيلة (عندما يتم وضع المستكشف في النافذة ، فإن tkfe balalaika يعتني بذلك).

تتضمن حزمة tkfe وظيفتين تجعل الأدوات غير قابلة للوصول (all_disable) أو متاحة (all_enable) داخل أداة معينة:

  proc all_disable {parent} {
    set widgets [info commands $parent*]
    foreach w $widgets {
	catch {$w configure -state disabled}
    }
  }
  proc all_enable {parent} {
    set widgets [info commands $parent*]
    foreach w $widgets {
	catch {$w configure -state normal}
    }
  }
  namespace export fe_getsavefile
  namespace export fe_getopenfile
  namespace export fe_choosedir
  namespace export all_enable
  namespace export all_disable

ومع ذلك ، أنا أفضل استخدام ميزات tk مشغول. هذا واضح في المثال:



هذه نظرية. من الناحية العملية ، تم استخدام حزمة tkfe في محطة عمل التشفير بناءً على معايير المفتاح العمومي cryptoarmpkcs . الآن يبدو استخدام مستكشف الملفات في هذا التطبيق لمنصة Linux كما يلي:



ولكن المستكشف الموجود في الإطار:



وبطبيعة الحال ، أصبح من السهل جدًا العمل مع المستكشف على نظام Android الأساسي:



قد يسأل أحدهم: ماذا عن Windows أو OS X؟ نعم ، كل شيء رائع. ولكن كما هو الحال دائمًا في Windows - هذه هي مشكلة الترويس ، في حالتنا هي استخدام الأبجدية السيريلية في تسمية الملفات والمجلدات ، بالإضافة إلى استخدام الشرطة المائلة للخلف. لذلك ، يجب إضافة الأسطر التالية إلى التعليمات البرمجية:

#    
# MS Win    cp1251
set tekdir [encoding convertfrom cp1251 $tekdir ]
#       
set tekdir [string map {"\\" "/"} $tekdir]

هذا ما يبدو عليه مستكشف tkfe على نظام Windows الأساسي:



الحزمة نفسها وأمثلة على استخدامها موجودة هنا .

All Articles