วันศุกร์ที่ 28 ธันวาคม พ.ศ. 2561

วันพุธที่ 26 ธันวาคม พ.ศ. 2561

วันเสาร์ที่ 8 ธันวาคม พ.ศ. 2561

miniproject [complete]

    โปรแกรมสามารถทำงานได้ตามที่วางเป้าหมายไว้ดังนี้

-แปลภาษา จากภาษาไทยเป็นภาษาอังกฤษ และ จากภาษาอังกฤษเป็นภาษาไทย
-เก็บคำศัพท์
-ฝึกการสะกดคำภาษาอังกฤษจากความหมายภาษาไทย

เข้าชม code ได้ตามที่อยู่เว็บไซต์ด้านล่าง
https://bitbucket.org/Wanvipa/gradeaenglish/src/default/

วิดีโอตัวอย่างการทำงาน

เพื่อนร่วมกลุ่มมีส่วนร่วมในการทำงานมากขึ้น จึงมีการแบ่งเปอร์เซ็นต์การมีส่วนร่วมในงานดังนี้

ฆฌาพงษ์ 40% ทำส่วนของหน้าแปลภาษาทั้งหมด ทั้งในส่วนการแปลและการค้นหาคำเหมือน 
ณัฏฐอาช 15% ทำส่วนการ setting และเพิ่มเติมในส่วนการ keep ให้แสดงหลายบรรทัดต่อกัน
วรรณวิพา 45% ทำส่วนการทำไฟล์คำศัพท์ตัวอย่าง หน้าต่างการทำงาน ส่วนการฝึกสะกดคำ และการจัดการหน้าต่างการทำงาน

วันศุกร์ที่ 7 ธันวาคม พ.ศ. 2561

มินิโปรเจคแอพแปลภาษา



ด้านบนคือการใช้งานโปรแกรมเบื้องต้น โดยในขณะนี้ การทำงานแบ่งเป็น 3 ส่วนคือ
1 โปรแกรมสามารถแปลภาษาจากภาษาอังกฤษ เป็น ภาษาไทย และ แปลจากภาษาไทยเป็นภาษาอังกฤษได้
2 กดที่ปุ่ม keep เพื่อเก็บคำศัพท์ได้ แต่ตอนนี้สามารถเก็บได้ทีละคำ ไม่สามารถเก็บหลายคำได้
3 เข้าหน้าเล่นเกมสะกดคำ สุ่มคำศัพท์ให้แสดงบนหน้าต่างโปรแกรมได้ และcheck คำได้ แต่ไม่แสดงผลบน GUI
4 การ setting ประกอบด้วยธีม 3 สี คือ น้ำเงินเข้ม เขียวแก่ และ สีดำ

สามารถชม code ได้ที่ https://bitbucket.org/Wanvipa/gradeaenglish/src/default/

ผลงานไม่เสร็จตามกำหนดเวลาที่วางไว้
1 สาเหตุส่วนหนึ่งมาจากหนูแบ่งงานแล้วไม่ติดตามงานมากพอ ทำให้เพื่อนทำงานล่าช้าและไม่เสร็จตามเวลาที่วางไว้
2 เพื่อนติดต่อไม่ได้ โทรศัพท์ไม่สามารถติดต่อได้ ไม่เปิดการสื่อสารช่องทางออนไลน์ และไม่เจอตัวในช่วงวันสอบ ทำให้ตามงานได้ยาก

งานที่ได้มอบหมายคือ
ฆฌาพงษ์ ทำส่วน ฟังก์ชันการทำงานต่างๆ
ณัฏฐอาช ทำส่วน การเชื่อมโยงฟังก์ชันกับหน้า GUI และเชื่อมต่อข้อมูลกับฐานข้อมูลออนไลน์
วรรณวิพา ทำส่วน ตัวอย่างไฟล์คำศัพท์สำหรับทดลองโปรแกรม ออกแบบหน้าต่าง GUI และเตรียมการนำเสนอ

เปอร์เซ็นต์การทำงาน
ฆฌาพงษ์ 35%  ทำส่วน function การแปลภาษา
ณัฏฐอาช   10% ทำส่วน setting
วรรณวิพา 55% ทำส่วน ไฟล์ตัวอย่างคำศัพท์ การออกแบบหน้าต่างโปรแกรม การ keep และ การสุ่มคำศัพท์ในส่วนการเล่นสะกดคำ

ขออนุญาตเลื่อนเวลาส่งงานฉบับสมบูรณ์ไม่เกินวันที่ 12 ธันวาคม 2561 ค่ะ

วันพุธที่ 5 ธันวาคม พ.ศ. 2561

ทบทวนเนื้อหา

      ทบทวนเนื้อหาวิชาที่สอบวันพฤหัสบดี 2 วิชา คือ
statistics for computer engineering
discrete mathematics

หลังสอบเสร็จในวันพรุ่งนี้จะตามงานที่ได้มอบหมายให้เพื่อนร่วมกลุ่มทำ คือ
   ณัฏฐอาช  รับผิดชอบ ส่วนการ setting
   ฆฌาพงษ์  รับผิดชอบ การเรียกใช้ฟังก์ชัน
   วรรณวิพา รับผิดชอบ การบันทึกและตัดต่อวิดีโอ demo การใช้งาน

วันอังคารที่ 4 ธันวาคม พ.ศ. 2561

ศึกษา clock

ศึกษาจาก เว็บไชต์ https://kivy.org/doc/stable/api-kivy.clock.html

def my_callback(dt):
    pass

# call my_callback every 0.5 seconds
event = Clock.schedule_interval(my_callback, 0.5)

# call my_callback in 5 seconds
event2 = Clock.schedule_once(my_callback, 5)

event_trig = Clock.create_trigger(my_callback, 5)
event_trig()

# unschedule using cancel
event.cancel()

# unschedule using Clock.unschedule
Clock.unschedule(event2)

# unschedule using Clock.unschedule with the callback
# NOT RECOMMENDED
Clock.unschedule(my_callback)def my_callback(dt):
    pass

# call my_callback every 0.5 seconds
event = Clock.schedule_interval(my_callback, 0.5)

# call my_callback in 5 seconds
event2 = Clock.schedule_once(my_callback, 5)

event_trig = Clock.create_trigger(my_callback, 5)
event_trig()

# unschedule using cancel
event.cancel()

# unschedule using Clock.unschedule
Clock.unschedule(event2)

# unschedule using Clock.unschedule with the callback
# NOT RECOMMENDED
Clock.unschedule(my_callback)

วันเสาร์ที่ 1 ธันวาคม พ.ศ. 2561

วันศุกร์ที่ 30 พฤศจิกายน พ.ศ. 2561

เตรียมสอบ

อ่านหนังสือเตรียมตัวสอบวิชา ฟิสิกส์ในชีวิตประจำวัน และวิชา สัญญาณและระบบ

วันพุธที่ 28 พฤศจิกายน พ.ศ. 2561

push local repository [ final test ]

    จากครั้งที่แล้วที่หนูมีปัญหาไม่สามารถอัพโฟลเดอร์ขึ้น bitbucket ได้ สามารถอัพขึ้นได้แล้ว
ด้วยการใช้คำสั่ง
>>  hg config --local
>> นำ link ของ repository ใส่ในส่วนของ path

>> hg push -f  https://Wanvipa@bitbucket.org/Wanvipa/s60-3012-8

commit เรียนร้อยแล้ว ตาม link ด้านล่าง


https://bitbucket.org/Wanvipa/s60-3012-8/src/default/

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

สอบ systematic and creative thinking

     สอบ systematic and creative thinking
เนื้อหาที่สอบเป็นการอ่านบทความแบะตีความหมายว่าเหมาะสมตรงกับข้อใด และเป็นการใช้ความคิดสร้างสรรค์ในการตอบคำถาม

======================================================================
อ่านหนังสือวิชา digital

วันจันทร์ที่ 26 พฤศจิกายน พ.ศ. 2561

วันอาทิตย์ที่ 25 พฤศจิกายน พ.ศ. 2561

อัพโฟลเดอร์ขึ้น bitbucket

     อัพโฟลเดอะขึ้น bitbucket ไม่ได้ค่ะ
ทำตามขั้นตอนที่ในเว็บได้บอกไว้แล้ว คือ
สร้าง repository ใหม่ใน bitbucket ให้ชื่อตรงกันกับโฟลเดอร์ของเรา จากนั้นใน command line ให้เข้าไปที่โฟลเดอร์นั้น และ hg push ตามด้วยลิ้งของโฟลเดอร์


แต่ว่าเกิด error ไม่สามารถอัพขึ้นได้ จึงได้ไปลองทำตามคำแนะนำในเว็บ 



แต่ก็ยังไม่สามารถอัพโฟลเดอร์ขึ้นไปได้

วันเสาร์ที่ 24 พฤศจิกายน พ.ศ. 2561

อ่านหนังสือ

    ทดทวนเนื้อหาสำหรับการสอบที่จะถึงคือ

วันอังคาร วิชา systematic and creative thinking
วันพุธ วิชา logic design of digital system

วันศุกร์ที่ 23 พฤศจิกายน พ.ศ. 2561

วันพฤหัสบดีที่ 22 พฤศจิกายน พ.ศ. 2561

นำภาษาไทยขึ้น GUI

        การแสดงภาษาไทยขึ้นบนหน้า GUI สามารถทำได้โดยการ นำ font ที่รองรับภาษาไทยมาใส่ไว้ในโฟลเดอร์เดียวกันกับ .kv และ .py จากนั้นให้ทำการกำหนด font_name : "ชื่อ font" ในส่วนที่ต้องการให้แสดงภาษาไทย แต่เนื่องจากเครื่องคอมพิวเตอร์มีปัญหาไม่รองรับภาษาไทย ทำให้เมื่อใส่คำสั่งตามนั้นแล้วไม่สามารถแสดงภาษาไทยได้ จึงได้ทำการใส่คำสั่ง encoding='utf8' ลงไปในไฟล์โปรแกรม .py
และทำให้สามารถแสดงภาษาไทยบนหน้าต่าง GUI ได้


=======================================================
ไฟล์ .kv
หน้าแรก
<MenuScreen>:
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'เก็บ A'
            font_size:'60'
            font_name:"THSarabunNew.ttf"   # กำหนด font ที่รองรับภาษาไทย
        Button:
            text: 'TRANSLATE'
            font_size:'32'
            size:[30,30]
            size_hint:(0.7,0.3)
            pos_hint:{'center_x':0.5}
            on_press: root.manager.current = 'TRANSLATE'
        Button:
            text: 'KEEP'
            font_size:'32'
            size:[30,30]
            size_hint:(0.7,0.3)
            pos_hint:{'center_x':0.5}
            on_press: root.manager.current = 'KEEP'
        Button:
            text: 'SPELL'
            font_size:'32'
            size:[30,30]
            size_hint:(0.7,0.3)
            pos_hint:{'center_x':0.5}
            on_press: root.manager.current = 'SPELL'
        Button:
            text: 'EXIT'
            color:[1,0,0,0.7]
            font_size:'32'
            size:[30,30]
            size_hint:(0.7,0.3)
            pos_hint:{'center_x':0.5}         
            on_press: root.manager.current = exit()
...............................................................................................................................
in file .py

#เมื่อเปิดไฟล์ gui.kv ให้ encoding ภาษาไทย ซึ่งเป็นคำสั่งที่ต้องใส่ถ้าหากทำตามวิธีที่กล่าวไปในตอนต้นไม่ได้ผล
with open('gui.kv', encoding='utf8') as f:
Builder.load_string(f.read())

vocabulary = {}
vocabulary2 = {}
wordfavourite = []
key = []
value = []
#open file
import csv
file = open("vocab.csv", "r",encoding="utf-8")
vocabulary_table = csv.reader(file)
for word, mean in vocabulary_table:
vocabulary.setdefault(word)
vocabulary[word] = mean
vocabulary2.setdefault(mean)
vocabulary2[mean] = word
key.append(word)
value.append(mean)

# Declare both screens
class MenuScreen(Screen):
pass

class TranslateScreen(Screen):

def search(self,wordvocab):
print(wordvocab)
if wordvocab in vocabulary.keys(): #หาคำจาก .keys() และ .values() ที่เก็บในรูป dictionary
print(vocabulary[wordvocab])
self.synonyms_thai(vocabulary[wordvocab],wordvocab)
self.trans.text = vocabulary[wordvocab]
elif wordvocab in vocabulary.values():
print(vocabulary2[wordvocab])
self.synonyms_english(vocabulary2[wordvocab],wordvocab)
self.trans.text = vocabulary2[wordvocab]
else :
self.trans.text = "Word not found"
#ตรวจสอบหาคำเหมือน
def synonyms_thai(self,wordcheck,wordvocab):
for i in vocabulary2.keys():
if (i == wordcheck and vocabulary2[wordcheck] is wordvocab):
print(vocabulary2[wordcheck])

def synonyms_english(self,wordcheck,wordvocab):
for i in vocabulary.keys():
if (i == wordcheck and vocabulary[wordcheck] is wordvocab):
print(vocabulary[wordcheck])
==============================================================================
ค้นหาคำศัพท์จากภาษาอังกฤษ


ค้นหาคำศัพท์จากภาษาไทย


เมื่อสะกดผิดหรือไม่มีข้อมูล จะแสดง word not found



==================================================================================

changeset: 12:248ae9c9607f

วันพุธที่ 21 พฤศจิกายน พ.ศ. 2561

ทำมินิโปรเจควิชา statistic

       ทำสถิติเกี่ยวกับคุณภาพของไวน์ และ แสดงผลบนหน้า web browser ด้วยการใช้ภาษา R

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

แผนเวลาการทำงาน

ส่วนงานที่อยู่ระหว่างดำเนินการ
- add คำแปลไปที่ label แล้วให้แสดงขึ้นหน้า gui
- นำฟังก์ชันที่สร้างมาใช้ใน class แล้วเรียกใช้ได้ครบทุกคลาส
- ทำส่วนการ setting
- รวมไฟล์

เวลาดำเนินการ
23 -24 พย     add คำแปลขึ้น gui และ ทำให้ทุกฟังก์ชันสามารถใช้งานได้
1 -2 ธค         ทำส่วน setting
5 ธค             รวมไฟล์และตรวจสอบความเรียบร้อยของงาน

คาดว่าจะพร้อมส่งวันที่ 7 ธันวาคม 2561

ใช้งานการค้นหาได้แล้ว


       นำฟังก์ชันค้นหามาใส่ลงใน class ที่สร้างรอไว้ และเรียกใช้ฟังก์ชันผ่านการกดปุ่มโดยการเชื่อมต่อปุ่มที่กดกับฟังก์ชันการทำงาน



python file
class TranslateScreen(Screen):

  def search(self,wordvocab):
        print(wordvocab)
        if wordvocab in key:
              print(vocabulary[wordvocab])
              self.synonyms_thai(vocabulary[wordvocab],wordvocab)
        elif wordvocab in value:
              print(vocabulary2[wordvocab])
              self.synonyms_english(vocabulary2[wordvocab],wordvocab)
         else :
               print("Word not found")
  
  def synonyms_thai(self,wordcheck,wordvocab):
          for i in vocabulary2.keys():
                 if (i == wordcheck and vocabulary2[wordcheck] is wordvocab):
                       print(vocabulary2[wordcheck])
  
  def synonyms_english(self,wordcheck,wordvocab):
         for i in vocabulary.keys():
                  if (i == wordcheck and vocabulary[wordcheck] is wordvocab):
                         print(vocabulary[wordcheck])
=============================================
kv file
กำหนดการเชื่อมโยงเพิ่มในส่วนของการค้นหา

BoxLayout:
  orientation: 'vertical'
  TextInput:
  id:insearch
  size:[30,30]
  font_size:'60'
  size_hint_y:dp(10)
  pos_hint:{'center_x':0.5}
  font_name:"THSarabunNew.ttf"
  multiline: False
BoxLayout:
  orientation: 'vertical'
  BoxLayout:
  orientation:'horizontal'
  Button:
  size:[30,30]
  size_hint:(0.2,0.5)
  pos_hint:{'center_x':0.5}
  text: 'SEARCH'
  on_press:root.search(insearch.text)
ในส่วนของการค้นหา สามารถค้นหาได้จากทั้งภาษาไทยและภาษาอังกฤษ

วันจันทร์ที่ 19 พฤศจิกายน พ.ศ. 2561

วันอาทิตย์ที่ 18 พฤศจิกายน พ.ศ. 2561

ทำ mini project วิชา ดิจิตอล และ วิชา สัญญาณและระบบ

วิชา ดิจิตอล
ออกแบบ component สำหรับวงจรนับเลขถอยหลังและมรการกดปุ่มเพื่อตั้งเวลา

ออบแบบวงจร debounce สำหรับจับขอบของการกดปุ่ม
ออกแบบวงจร mux สำหรับเลือกข้อมูล 3 เอา 1
ออกแบบวงจร demux สำหรับถอดรหัสสัญญาณ 1 เป็น 4
ออกแบบวงจร นับลด ให้นับเลขลดลงทีละ 1

ติดปัญหาอยู่ที่วงจรนับลดสามารถนับลดได้ 1 bit แต่วงจรต้องการนับลด 4 bit
  #วงจรเขียนด้วยภาษา vhdl

library ieee;
use ieee.std_logic_1164.all;
entity binary_countdown is
port( A: in std_logic_vector(3 downto 0);         
B: in std_logic_vector(3 downto 0);         
Ain: in std_logic_vector(3 downto 0);          
binary_out: out std_logic_vector(3 downto 0);         
Bo: out std_logic_vector(3 downto 0)); 
end binary_countdown;
architecture behav1 of binary_countdown is
signal x : std_logic_vector(3 downto 0);
signal y : std_logic_vector(3 downto 0);       
begin      
process(A,B,x)--Ain)        
begin        
binary_out <= (A xor (B xor x));        
x <= (((not A) and B) or (x and ((not A) xor (not B))));       
end process; 
end behav1; 




วิชา สัญญาณและระบบ
ทำให้แสดงกราฟสัญญาณขึ้นบนหน้า gui ได้แล้ว แต่ ยังไม่สามารถกำหนดความถี่ของสัญญาณเองได้ เนื่องจาก ไม่สามารถรับ text ที่เป็น type ชนิดตัวเลขได้

วันเสาร์ที่ 17 พฤศจิกายน พ.ศ. 2561

ศึกษา scrollview

        scrollview เป็น widget ที่ช่วยในการจัดการหน้าจอ ให้สามารถเลื่นเพื่อดูข้อมูลได้โดยสามารถเลื่อนได้ทั้งแนวแกน x และแนวแกน y

from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.scrollview import ScrollView #import ScrollView
from kivy.core.window import Window
from kivy.app import runTouchApp

layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
# Make sure the height is such that there is something to scroll.
layout.bind(minimum_height=layout.setter('height'))
for i in range(50):
btn = Button(text=str(i), size_hint_y=None, height=40)
layout.add_widget(btn)
root = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
#การเรียกใช้งาน ScrollView
root.add_widget(layout)

runTouchApp(root)

เมื่อรันโปรแกรมจะได้ดังนี้
-จะเริ่มต้นที่ปุ่มที่ 0

- เลื่อนแกน y ขึ้นลงจะได้ดังภาพด้านล่าง



=====================================================================

วันศุกร์ที่ 16 พฤศจิกายน พ.ศ. 2561

SETTING

       การ setting ที่ผู้ใช้สามารถเลือกได้เองได้คิดไว้ 3 ลักษณะคือ
1  เลือกธีม ซึ่งจะมี 2-3 ธีม คือ

      พื้นหลังสีขาว ตัวหนังสือสีดำ
      พื้นหลังสีฟ้า ตัวหนังสือสีน้ำเงิน
      พื้นหลังสีดำ ตัวหนังสือสีขาว 

2  ปรับขนาดของหน้าจอให้เป็นขนาดปกติที่ตั้งไว้หรือปรับเป็นโหมดเต็มจอ

3 สามารถเลือกได้ว่าจะใช้การแปลภาษาไทย เป็น ภาษาอังกฤษ หรือแปลภาษาอังกฤษ เป็น ภาษาไทย



ปรับขนาด สี Text บน GUI

       หาสีที่ต้องการโดยการเทียบสีจาก https://www.tug.org/pracjourn/2007-4/walden/color.pdf
เมื่อเข้าไปจะพบกับสีและรหัสสีดังภาพด้านล่าง

ตั้งค่าสี ในไฟล์ .kv
       
     <MenuScreen>:
BoxLayout:
orientation: 'vertical'
Label:
text:'Grade A English'
color:[1,1,1,1] #กำหนดสีโดยกำหนด [สีแดง,สีเขียว,สีน้ำเงิน]
font_size:'60'
font_name:"THSarabunNew Bold.ttf" #กำหนดรูปแบบตัวอักษร
โดยในการกำหนดรูปแบบตัวอักษรนั้น ให้นำไฟล์ font มาใส่ลงในโฟลเดอร์เดียวกันกับโฟลเดอร์ที่เก็บไฟล์งานไว้

และปรับแก้ไขหน้าต่าง GUI ดังนี้

หน้าแรก
ปรับขนาดปุ่มและใส่สี

หน้า Translate
ใส่ช่องสำหรับ input text
เพิ่มปุ่ม keep

หน้า keep



หน้า spell
เพิ่มตัวแสดงการผิดได้ 3 ครั้ง

วันพฤหัสบดีที่ 15 พฤศจิกายน พ.ศ. 2561

ศึกษาการแสดงภาษาไทย

จาก https://nextflow.in.th/2014/python-with-thai-language/
ยังไม่สามารถแสดงภาษาไทยได้
ได้ไปแก้ปัญหาโดยการ โหลด font ภาษาไว้ในโฟลเดอร์เดียวกันกับไฟล์งานและเรียกใช้ในไฟล์ .kv พบว่ามีปัญหาเหมือนเดิม

ปัจจุบันยังไม่สามารถแสดงภาษาไทยได้

วันพุธที่ 14 พฤศจิกายน พ.ศ. 2561

update gui

นำการสร้าง GUI มาใส่ลงในไฟล์ .kv ทั้งหมด และทำการลดหน้าต่างเหลือ 4 จากของเดิมที่มี 5 (ลบหน้าเริ่มต้นออก)
3:64a450b65b28
https://bitbucket.org/Wanvipa/gradeaenglish/commits/64a450b65b28268a454ce2f41c090f730ce5f264
========================================================================
from kivy.app import App
from kivy.lang import Builder
from kivy.config import Config
from kivy.metrics import dp, sp
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.graphics import *

Builder.load_file("gui.kv")

# Declare both screens
class MenuScreen(Screen):
pass

class TranslateScreen(Screen):
pass

class KeepScreen(Screen):
pass

class PlayScreen(Screen):
pass
#ลดการจัดการหน้าเหลือแค่ 4 หน้า
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='MENU'))
sm.add_widget(TranslateScreen(name='TRANSLATE'))
sm.add_widget(KeepScreen(name='KEEP'))
sm.add_widget(PlayScreen(name='SPELL'))

class TestApp(App):

def build(self):
Config.set('graphics' , 'width' , '300')
Config.set('graphics' , 'height' , '600')
#set not to change size window
# Config.set('graphics' , 'resizable' , False)
return sm

if __name__ == '__main__':
TestApp().run()

======================================================================================
<MenuScreen>:
BoxLayout:
orientation: 'vertical'
Label:
text:'Grade "A" English'
font_size:'60'
Button:
text: 'TRANSLATE'
on_press: root.manager.current = 'TRANSLATE'
Button:
text: 'KEEP'
on_press: root.manager.current = 'KEEP'
Button:
text: 'SPELL'
on_press: root.manager.current = 'SPELL'
Button:
text: 'EXIT'
on_press: root.manager.current = 'START'

<TranslateScreen>:
BoxLayout: #จัด layout แยกเป็น 2 กล่อง คือส่วนใส่ input กับ ส่วนแสดงผลและปุ่มกดต่างๆ
orientation: 'vertical'
BoxLayout:
orientation: 'vertical'
padding:50
TextInput:
id:'search'
size:[30,60]
BoxLayout:
orientation: 'vertical'
Button:
size:[30,30]
text: 'SEARCH'
#สำหรับแสดงผลความหมายกับคำเหมือน โดยให้แสดงออกมาเป็น label
Label:
text: 'Meaning'
Label:
text:'Synonym'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'MENU'

<KeepScreen>:
BoxLayout:
orientation: 'vertical'
Label:
text: 'KEEP'
Button:
text:'word'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'MENU'

<PlayScreen>:
BoxLayout:
orientation: 'vertical'
BoxLayout:
orientation: 'vertical'
Label:
text: 'Meaning'
TextInput:
id:'consonant'
BoxLayout:
GridLayout:
id:btn
cols: 3
rows: 4
text: 'consonant'
BoxLayout:
orientation: 'vertical'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'MENU'

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

mini Project [update]

สร้างหน้า  GUI หลายหน้าและเชื่อมต่อแต่ละหน้าเข้าด้วยกันได้แล้ว

========= import เครื่องมือที่ต้องการใช้งาน==================
from kivy.app import App
from kivy.lang import Builder
from kivy.config import Config
from kivy.metrics import dp, sp
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen

=============load file===================
โหลดไฟล์ .kv ที่ทำการจัดการหน้าต่างมาใช้งาน
#load file gui
Builder.load_file("gui.kv")


============= build class================
สร้าง class สำหรับแต่ละการทำงานไว้ โดยให้ pass ไปก่อนเพื่อรอนำมารวมการฟังก์ชันการทำงานที่เพื่อนออกแบบ


# Declare both screens
class StartScreen(Screen):
pass

class MenuScreen(Screen):
pass

class TranslateScreen(Screen):
pass

class KeepScreen(Screen):
pass

class PlayScreen(Screen):
pass


============== screen manager===============
จัดการหน้าต่าง โดยการใช้ screenmanager และ add widget ในส่วนของ screen แต่ละหน้าเข้าไปให้ screenmanager จัดการ

# Create the screen manager
sm = ScreenManager()
sm.add_widget(StartScreen(name='START'))
sm.add_widget(MenuScreen(name='MENU'))
sm.add_widget(TranslateScreen(name='TRANSLATE'))
sm.add_widget(KeepScreen(name='KEEP'))
sm.add_widget(PlayScreen(name='SPELL'))


======ส่วนเรียกใช้ให้แสดงการทำงาน========
class TestApp(App):

def build(self):
Config.set('graphics' , 'width' , '500')
Config.set('graphics' , 'height' , '300')
#set not to change size window
Config.set('graphics' , 'resizable' , False)
return sm

if __name__ == '__main__':
TestApp().run()


===================================================
การจัดหน้าต่าง GUI ใช้การจัดการด้วยไฟล์ .kv
#หน้าต่างแรก แสดงชื่อ Grade "A" English ปุ่ม START เข้าโปรแกรม และ Exit เพื่อปิดโปรแกรม
<StartScreen>:
BoxLayout:
orientation: 'vertical'
Label:
text:'Grade "A" English'
font_size:'60' #กำหนดขนาดตัวอักษร
Button:
text: 'START'
on_press: root.manager.current = 'MENU' #เมื่อกดปุ่มนี้ให้เชื่องโยงไปที่หน้า MANU
Button:
text: 'Exit'

#ให้เลือกการทำงานแต่ละ case
#หน้า MANU
<MenuScreen>:
BoxLayout:
orientation: 'vertical'
Button:
text: 'TRANSLATE'
on_press: root.manager.current = 'TRANSLATE'#เข้าไปที่หน้า TRANSLATE
Button:
text: 'KEEP'
on_press: root.manager.current = 'KEEP'#เข้าไปที่หน้า KEEP
Button:
text: 'SPELL'
on_press: root.manager.current = 'SPELL'#เข้าไปที่หน้า SPELL
Button:
text: 'EXIT'
on_press: root.manager.current = 'START'#กลับไปที่หน้า START


#หน้าต่างการแปลความหมาย
<TranslateScreen>:
BoxLayout:
orientation: 'vertical'
Button:
text: 'SEARCH' #ปุ่ม SEARCH สำหรับกดค้นหาความหมาย
Button:
text: 'Back to menu'
on_press: root.manager.current = 'MENU' #กลับไปที่หน้า MENU


#หน้าต่างคำศัพท์ที่ Keep
<KeepScreen>:
BoxLayout:
orientation: 'vertical'
Label:
text: 'KEEP' # แสดงชื่อหัวข้อว่า KEEP
Button:
text:'word' #ส่วนปุ่มสำหรับเวลาเพิ่มคำศัพท์เข้ามาจะให้แสดงเป็นปุ่มแต่ละปุ่ม
Button:
text: 'Back to menu'
on_press: root.manager.current = 'MENU' #กลับไปที่หน้า MENU


#หน้าต่างให้เล่นเกมสะกดคำศัพท์
<PlayScreen>:
BoxLayout:
orientation: 'vertical'
Label:
text: 'Meaning' #ให้แสดงความหมายของคำที่ต้องการให้สะกด
Button:
text: 'Back to menu'
on_press: root.manager.current = 'MENU' #กลับไปที่หน้า MENU
=====================================================
ปัญหาปัจจุบัน
นำภาษาไทยขึ้นแสดงบน GUI ไม่ได้

ปรับขนาดหน้าจอไม่ได้
ฟังก์ชันการทำงานยังสร้างไม่ครบ
ยังไม่ได้เชื่อมต่อส่วนฟังก์ชันกับหน้า GUI
ยังไม่สามารถเชื่อมต่อฐานข้อมูลได้

=====================================================
commit แล้ว

วันจันทร์ที่ 12 พฤศจิกายน พ.ศ. 2561

ติดตั้งโปรแกรมแล้ว

           ติดตั้ง windows เรียบร้อยแล้ว และติดตั้ง ubuntu ลงใน visual machine และติดตั้งโปรแกรม visual studio code ลงในทั้ง windows และ ubuntu พร้อมทั้งติดตั้ง kivy และโปรแกรมสามารถใช้งานได้ปกติแล้ว

วันอาทิตย์ที่ 11 พฤศจิกายน พ.ศ. 2561

ศึกษาคำสั่งการทำงาน screen manager

           Screen manager คือคำสั่งที่ใช้เพื่อการจัดการหน้าต่างการทำงาน โดยปกติแล้วหน้าต่างการทำงานปกติจะมี 1 หน้า แต่เราสามารถเพิ่มและสลับหน้าการทำงานได้ด้วยการจัดการหน้าจอ

from kivy.uix.screenmanager import ScreenManager, Screen

# Create the manager
sm = ScreenManager()

# Add few screens
for i in range(4):
    screen = Screen(name='Title %d' % i)
    sm.add_widget(screen)

# By default, the first screen added into the ScreenManager will be
# displayed. You can then change to another screen.

# Let's display the screen named 'Title 2'
# A transition will automatically be used.
sm.current = 'Title 2'

คำสั่งแบบพื้นฐานในการเปลี่ยนหน้าต่าง ด้วยการใช้ ScreenManager

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

Builder.load_string("""
<MenuScreen>:
    BoxLayout:
        Button:
            text: 'Goto settings'
            on_press: root.manager.current = 'settings'
        Button:
            text: 'Quit'

<SettingsScreen>:
    BoxLayout:
        Button:
            text: 'My settings button'
        Button:
            text: 'Back to menu'
            on_press: root.manager.current = 'menu'
""")

# Declare both screens
class MenuScreen(Screen):
    pass

class SettingsScreen(Screen):
    pass

# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))

class TestApp(App):

    def build(self):
        return sm

if __name__ == '__main__':
    TestApp().run()

แบบใช้ไฟล์ .kv มาช่วยในการกำหนดรูปแบบการทำงาน