วันอังคารที่ 8 พฤศจิกายน พ.ศ. 2559

Memo - Already Edit textfile / Show Error Popup

[bitbucket]

Already Edit textfile
    แนวคิด : การ add กับ การ edit ไม่ค่อยต่างการสักเท่าไหร่ น่าจะใช้ร่วมกันได้เลย

    เริ่มแรกก็ทำการไปสร้าง attribute ให้กับ add ซะก่อน (id ได้ทำการสร้างเผื่อไปจากครั้งที่แล้ว)



    เมื่อมีการกดปุ่ม edit ก็จะมีการเรียกใช้ Method edit โดยจะส่งค่าตำแหน่งที่อยู่ไฟล์และชื่อไฟล์มาให้ ภายใน Method นี่ก็จะคล้ายกับส่วนของ add แต่จะมีการเพิ่มเติมเล็กน้อย คือ แก้ไขให้ข้อมูลใน textinput ทั้งส่วนของชื่อไฟล์และเนื้อหา เป็นชื่อไฟล์และเนื้อหาของไฟล์ที่เลือกมาแก้ไขแทน



Show Error Popup
    ทำการสร้าง class ในไฟล์ kv เพื่อสร้างหน้าตาของ Pop-up ขึ้นมาก่อน


    จากนั้นก็ไปสร้าง method ในไฟล์ python โดยจะรับค่า error_text เข้ามาแล้วส่งให้ไฟล์ kv เพื่อใช้แสดงข้อความว่า error อะไร


    ตัวอย่างการเรียกใช้


Memo - Already Add Text File with Popup

[bitbucket]

    ส่วนของ add ก็จะใช้หลักการเดียวกับการ view file ก็คือสร้าง class ในไฟล์ kv ก่อนจากนัั้นจึงไปเรียกใช้และกำหนดค่าต่างๆให้กับ class ในไฟล์ py จากนั้นก็ทำการให้ content ใน Pop-up นั้นเป็น class ที่เราได้สร้างเอาไว้

    ในการ add นั้นก็จะใช้ textinput มาเป็นเหมือนกล่องข้อความคอยรับค่าข้อความที่ผู้ใช้พิมพ์เข้ามา โดยจะสร้างเป็นสองส่วน ก็คือส่วนช่องชื่อไฟล์ และ ส่วนของเนื้อหา จากนั้นก็ทำการสร้างปุ่ม save และ cancel


    สำหรับในโค้ด python อย่างที่ได้กล่าวไปข้างต้นถึงหลักการว่าไม่ต่างกับส่วนของการ view เท่าไหร่


    แต่ส่วนที่ต้องทำเพิ่มก็คือ Method Save ที่จะรับค่าชื่อไฟล์และเนื้อหาเข้ามา ซึ่งภายในก็จะมีการใช้คำสั่ง  open(os.path.join('note/', filename), 'w') ก่อนเพื่อเป๋นการสร้างไฟล์ไว้ แล้วเก็บไว้กับตัวแปรที่ชื่อ textfile จากนั้นก็ใช้คำสั่ง textfile.write(content) เพื่อเขียนเนื้อหาเข้าไปในไฟล์ที่เก็บไว้กับตัวแปร textfile


Memo - edit : open text file(Popup)

[bitbucket]

    เปลี่ยนส่วนของการแสดงชื่อไฟล์ให้ใช้คำสั่ง os.path.basename


    จากครั้งที่แล้วได้พบกับปัญหา ตัวอักษรล้นกรอบ จึงได้ไปหาข้อมูลเพิ่มจนได้รู้จักกับ ScrollView ที่จะช่วยมาแก้ปัญหานี่ได้
    ScrollView เป็น widget ตัวนึงของ kivy ที่ทำหน้าที่คล้ายกับว่าทำให้สามารถเลื่อนดูข้อมูลที่เกินกรอบ layout ได้ แทนที่จะล้นกรอบออกไป

    เริ่มแรกเลย ทำการสร้าง class ShowText ในไฟล์ menubar.kv เพื่อกำหนดส่วนต่างๆที่จะให้แสดงใน Pop-up ในที่นี้ก็จะใช้ BoxLayout แบ่งเป็นส่วนของ
    - ScrollView ที่ข้อมูล text จะรับค่าจาก root.text หรือ text ในไฟล์ python
    - ปุ่ม cancel ที่เมื่อกดแล้วก็จะเรียกใช้ root.cancel()


    ใน menubar.py จะเปลี่ยนจากการสร้าง Boxlayout ให้เป็นการเรียกใช้ ShowText แทน โดยจะส่งค่า textfile.read() ให้กับ text และส่งคำสั่งปิด Pop-up คือ self.dismiss_popup ให้กับ cancel(เปรียบเสมือนเป็น Method) จากนั้นจึงทำการเก็บไว้ในตัวแปรที่ชื่อ content เพื่อนำไปใช้เป็น content ใน Pop-up





Memo - open text file(show data in popup)

[bitbucket]

    จากครั้งที่สามารถ view file ได้แล้ว แต่เป็นการแสดงผลใน terminal จึงทำการประยุกต์ใช้ให้การแสดงเป็นแบบ Pop-up ขึ้นมาแทน

    โดยเราจะใส่ข้อมูลไว้ใน Label ที่อยู่ในตัวแปร box ซึ่งเป็น BoxLayout จากนั้นจึงสร้าง Pop-up ขึ้นมาโดยกำหนดให้ title คือ self.desk.fileSelect_name หรือก็คือชื่อไฟล์ที่รับมาจะ class desk และกำหนดให้ content คือ box ที่เราใส่ข้อมูลเอาไว้
    ในคอมมิตนี้ยังไม่ได้มีการสร้างปุ่ม close และยังพบปัญหาตัวอักษรล้นกรอบ จึงไดทำการแก้ปัญหาในคอมมิตต่อๆไป


Memo - open text file(show data in terminal)

[bitbucket]

    จากที่ได้ศึกษาตามเว็บต่างๆ ทำให้รู้จักกับคำสั่งที่จะใช้ในส่วนของการ view file ได้

    โดยขั้นแรกจะมีการกำหนด on_release ให้กับปุ่ม view note ก่อน หากกดแล้วปล่อยก็จะมีเรียกใช้ Method open โดยค่าพารามิเตอร์ที่ส่งไปก็จะมี ตำแหน่งของไฟล์ที่เลือก และ ไฟล์ที่เลือก
    ใน Method open จะ try except เผื่อในกรณีที่ไม่มีการเลือกไฟล์ก็จะใน except ในส่วนของ try นั้นจะมีการใช้คำสั่ง open เพื่อเปิดไฟล์แล้วเก็บไว้กับตัวแปรที่ชื่อ f จากนั้นก็ให้ print(f.read()) หรือก็คือการ print ที่อ่านออกมาจากไฟล์ที่เก็บไว้กับตัวแปร f นั่นเอง


Memo - edit show filename

[bitbucket]

    เนื่องจากการแสดงชื่อไฟล์ก่อนหน้านี้จะมีการแสดง path อยู่ด้วย จึงพยายามทำการแก้ไขให้แสดงเฉพาะชื่อไฟล์เท่านั้น ซึ่งในคอมมิตนี้เลือกที่จะใช้คำสั่ง rspilt ตัดคำที่อยู่หลัง \ จากท้ายออกมาเพื่อนำมาแสดงทาง terminal  ( ภายหลังพบว่าเกิดปัญหาจึงได้เปลี่ยนไปใช้ os.path.basename แทน )


Memo - Show Filename in Terminal when Select File

[bitbucket]

    ใช้คำสั่ง on_selection เพื่อให้เมื่อมีการเลือกไฟล์จะไปเรียกใช้ Method selected โดยส่งค่าพารามิเตอร์เป็นไฟล์ที่เลือกออกมา เพื่อทำการแสดงชื่อไฟล์ออกมาทาง terminal