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 ที่ต้องใส่ไว้ท้ายโปรแกรม
ส่วนการคำนวณเอาไว้คร่าวหน้าครับ



Create Date : 14 เมษายน 2554
Last Update : 14 เมษายน 2554 18:50:03 น.
Counter : 10932 Pageviews.

0 comments
ชื่อ :
Comment :
 *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

J-learning.BlogGang.com

wink99_th
Location :
พิษณุโลก  Thailand

[ดู Profile ทั้งหมด]
 ผู้ติดตามบล็อก : 8 คน [?]

บทความทั้งหมด