Python ทดลองเขียนโปรแกรมเครื่องคิดเลข บวก ลบ ตอนที่1 หลังจากเล่นน้ำสงกรานต์ กันชุ่มช้ำ ก็มาเขียน python กันต่อ ครั้งนี้ทดลองเขียนโปรแกรมเครื่องคิดเลข เฉพาะเครื่องหมายบวกกับลบ ง่ายๆ จะได้ศึกษาเรื่องการสร้าง Label, ปุ่มกด(button), การLayout, ฟังก์ชั่น (def) และเรื่อง lambda (อันนี้งงมาก) มาดูcode กันเลย ตัวเต็ม download ได้ที่นี้นะครับ from Tkinter import * เพื่อบอกว่าจะใช้ module จาก Tkinter import sys reload(sys) sys.setdefaultencoding('utf-8') สามบรรทัดนี้สำหรับให้แสดงผลภาษาไทย ที่ net บอกว่า ใช้ utf-8 ง่ายกว่า root = Tk() สร้าง หน้าจอหลัก frame = Frame(root) สร้าง frame เพื่อใช้ในการจัด Layout frame.pack() เป็น method สำหรับจัดการ widgets ก่อนกับใส่ใน parent window ซึ่งสามารถใช้ parameter เป็น LEFT RIGHT TOP BOTTOM bframe = Frame(frame) bframe.pack(side = BOTTOM) b2frame = Frame(bframe) b2frame.pack(side = BOTTOM) b3frame = Frame(b2frame) b3frame.pack(side = BOTTOM) จากที่อธิบายข้างต้นตอนนี้เป็นการจัดการให้เกิดการจัด Layout ของแถวwidgets จำนวน 3 แถว ถ้ารวม frame ก็เป็น 4 แถว ที่จริงการจัด layout นอกจากใช้ pack ยังมีแบบ place กับ grid อีก แต่ยังไม่ได้อ่าน dispL = Label(frame, text="กรอกตัวเลขได้เลยครับ" ) dispL.pack() การสร้าง Label ก็ง่ายๆ แค่ระบุว่าจะสร้างที่ widget อะไร และใส่ข้อความอะไร เสร็จแล้วก็ pack ส่ะ ถ้าต้องการให้ขึ้นบรรทัดใหม่ ก็ใส่ back slash กับตัวอักษร n disp = Label(frame, text="" ) disp.pack() อันนี้เอาไว้แสดงว่าเรากดปุ่มอะไรบ้าง n7 = Button(frame, text="7", padx=8, command = lambda b='7': callback(b)) n7.pack(side = LEFT) การใส่ปุ่มกดก็คล้ายๆ Label แต่เพิ่ม การขยายขนาดก็ปุ่มคือ padx การเรียกฟังก์ชั่นผ่าน command โดยกรณีที่เราไม่ได้ส่งค่าไปให้ฟังก์ชั่น เราสามารถเขียนว่า command = callback ได้ แต่ถ้ามีการส่งค่าจะเขียน command = callback('7') ไม่ได้ งงเหมือนกันตรงจุดนี้ เลยไปหาข้อมูลจาก net เขาบอกว่าต้องใช้ lambda ช่วยก็จะเป็นแบบข้างบนรายละเอียดลองดู//www.secnetix.de/olli/Python/lambda_functions.hawk อ่านก็คง งงๆ อีก ต่อไปก็เรื่องการเขียนฟังก์ชั่น def callback(str): disp['text'] = disp['text']+str print str ฟังก์ชั่นนี้เพื่อแสดงข้อมูล จะสังเกตเห็นว่ามันไม่มี จุดบอกจุดสิ้นสุดของ ฟังก์ชั่น ดังนั้นมันใช้การย่อหน้าาาาาาา ทำไมมันไม่ออกแบบว่าต้องเขียน end def หว่า disp['text'] เป็นรูปแบบการอ้างถึงค่าproperties ใน Label ในที่นี้ก็คือ text root.mainloop() ก็นี้ก็เป็น mainloop ที่ต้องใส่ไว้ท้ายโปรแกรม ส่วนการคำนวณเอาไว้คร่าวหน้าครับ |
บทความทั้งหมด
|