Sufficiency Economy
Group Blog
 
All blogs
 
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 น. 0 comments
Counter : 10931 Pageviews.

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

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

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]




New Comments
Friends' blogs
[Add wink99_th's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.