membuat jam analog versi 3

BelajarPython - Assalamualaikum wr.wb.

Jumpa lagi nih temen - temen.. Pada kesempatan kali ini, saya akan mencoba untuk membuat produk aplikasi lagi ya... Dan perlu kalian ketahui, postingan ini merupakan postingan untuk melanjutkan postingan saya sebelumnya ya... Nah postingan yang mana ya ? Kan udah liat judul.. Masak belum tau sih... Nah dari pada penasaran, yuk langsung saja kita simak sama - sama postingan saya kali ini... Semoga kalian betah ya... heehe

Pengenalan aplikasi yang akan di buat.

nah seperti yang sudah saya informasikan sebelumnya ya.. Kali ini saya akan mencoba untuk melanjutakan postingan yang sebelumnya. Kalian bisa melihat postingan saya yang sebelumnya dengan cara KLIK DISINI. Dan perlu kalian ketahui, postingan kali saya akan memberikan atau membuat sebuah aplikasi jam analog multiple alarm. Yang sudah jelas tentunya ya... Dimana kita akan membuat jam analog yang bisa kita pasangi lebih dari satu alarm saja.

Dimana pada postingan sebelumnya saya membuat postingan untuk membuat jam analog dengan hanya bisa membuat satu alarm saja. Dan aplikasi yang akan saya bagikan code programnya ini, merupakan aplikasi versi 3. Kalian bisa melihat tiap versinya dengan cara KLIK DISINI.

Spesifikasi dan Fitur aplikasi jam analog alarm.

Untuk spesifikasi lengkap dari aplikasi yang akan kita buat kali ini, kalian bisa melihatnya secara lengkap yang ada di bawah ini ya temen - temen..


Nama: Jam analog multiple alarm.
Versi: 3.
Peningkatan fitur: multiple alarm.
Platform : Python 3.x
Modul : Tkinter dan pygame. Klik disini untuk tutorial instalasi pygame nya.
Baris code : kurang lebih 265 baris code program.
Fitur : jam analog dan multiple alarm.
Syarat menjalankan : install python 3.x dan pygame, punya editor atau IDE.
Cara menjalankan : install python 3, install pygame, copy dan paste code program pada editor atau IDE, simpan dalam file python, lalu jalankan.


Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu loh.. sehingga, nantinya kita cukup klik dua kali saja untuk menjalankan aplikasi ini... tanpa perlu repot - repot membuka nya di IDLE atau IDE python.. nah seperti apa caranya? cukup mudah kok.. dan saya juga sudah membuatkan tutorialnya.. untuk kalian yang menggunakan windows, KALIAN BISA KLIK DISINI ya temen - temen.. atau jika pada link pertama terlalu rumit, KALIAN BISA MENCOBA CARA INI ya.... dan bagi pengguna linux ? tenang saja.. bisa juga kok membuat file executable nya.. untuk melihat tutorialnya, KALIAN BISA KLIK DISINI temen - temen...

Code program untuk membuat jam analog multiple alarm.

Nah setelah kita saya perkenalkan aplikasi yang akan kita buat kali ini, dan sudah tau juga tentang spesifikasi atau fiturnya, sekarang saya akan langsung mencoba untuk membagikan code programnya ya... Biar kalian tidak penasaran lagi.. Hehe.. Oke let’s check it out temen - temen...

from tkinter import *
from tkinter.ttk import Combobox
import time
from math import cos,sin,pi
import pygame

class MyApp():
    def __init__(self, root):
        self.size=300
        self.parent=root

        self.frameAlarm=Frame(root)
        self.frameJam = Frame(root)
        self.framePemberitahuan=Frame(root)

        self.alarmHidup = False
        self.teksJam = StringVar()
        self.antrianAlarm = []
        self.hidupMati = BooleanVar(False)
        self.fileMusik = 'hysteria.mp3'
        self.teksTombolAtur = StringVar(value='atur')

        self.teksTombol = StringVar(value='set')

        self.buatFrameJam()
        self.buatJarum()
        self.buatTeksAngka()
        self.buatTeks()
        self.update_clock()

    def buatTeks(self):
        self.teks = Label(text="mn-belajarpython.blogspot.com", font="Helvetica 12 bold")
        self.teks.pack()

        self.teksPemberitahuan = Label(self.framePemberitahuan, text='Tidak ada alarm terpasang.', bg="white")
        self.teksPemberitahuan.grid(row=0, column=0)

        self.tombolAtur= Button(self.framePemberitahuan, textvariable=self.teksTombolAtur, command=self.jendelaPembuatAlarm)
        self.tombolAtur.grid(row=0, column=1)

        self.framePemberitahuan.pack()

    def buatFrameJam(self):
        root.title("Clock")
        self.w = Canvas(self.frameJam,width=320, height=320, relief= "sunken", border=10)
        self.w.pack()
        self.frameJam.pack()


    def buatJarum(self):
        self.w.create_line(0, 0, 0, 0, fill="red", tags="hour", width=3)
        self.w.create_line(0, 0, 0, 0, fill="black", tags="minute", width=6)
        self.w.create_line(0, 0, 0, 0, fill="black", tags="second", width=6)

    def buatTeksAngka(self):
        Label(self.frameJam, text="12").place(x=160, y=13)
        Label(self.frameJam, text="11").place(x=80, y=28)
        Label(self.frameJam, text="10").place(x=31, y=90)
        Label(self.frameJam, text="9").place(x=11, y=157)
        Label(self.frameJam, text="8").place(x=31, y=230)
        Label(self.frameJam, text="7").place(x=80, y=285)
        Label(self.frameJam, text="6").place(x=160, y=303)
        Label(self.frameJam, text="5").place(x=240, y=285)
        Label(self.frameJam, text="4").place(x=291, y=230)
        Label(self.frameJam, text="3").place(x=310, y=157)
        Label(self.frameJam, text="2").place(x=291, y=90)
        Label(self.frameJam, text="1").place(x=240, y=28)

    def update_clock(self):
        s=time.localtime()[5]
        m=time.localtime()[4]
        h=time.localtime()[3]

        self.jam = time.strftime("%H", time.localtime())
        self.menit = str(int(time.strftime("%M", time.localtime()))-1)
        detik = time.strftime("%S", time.localtime())

        cocok = self.jam + ' : ' + self.menit

        if len(self.antrianAlarm):
            self.teksPemberitahuan.config(text="alarm selanjutnya -> "+self.antrianAlarm[0])
            if cocok == self.antrianAlarm[0] and (detik == '00'):
                self.teksTombol.set('stop')
                self.antrianAlarm.pop(0)
                self.alarmHidup = True
                self.teksTombolAtur.set('stop')

                pygame.init()
                pygame.mixer.init()
                pygame.mixer.music.load(self.fileMusik)
                pygame.mixer.music.play()
        else :
            self.teksPemberitahuan.config(text='Tidak ada alarm terpasang.')

        if self.alarmHidup and pygame.mixer.music.get_busy() == False:
            self.perintahSetAlarm()

        degrees = 6*s
        angle = degrees*pi*2/360
        ox = 165
        oy = 165
        x = ox + self.size*sin(angle)*0.45
        y = oy - self.size*cos(angle)*0.45
        self.w.coords("hour", (ox,oy,x,y))

        degrees1 = 6*m
        angle1 = degrees1*pi*2/360
        ox1 = 165
        oy1 = 165
        x1 = ox1 + self.size*sin(angle1)*0.4
        y1 = oy1 - self.size*cos(angle1)*0.4
        self.w.coords("minute", (ox1,oy1,x1,y1))

        degrees2 = 30*h
        angle2 = degrees2*pi*2/360
        ox2 = 165
        oy2 = 165
        x2 = ox2 + self.size*sin(angle2)*0.2
        y2 = oy2 - self.size*cos(angle2)*0.2
        self.w.coords("second",(ox2,oy2,x2,y2))

        self.parent.after(1000, self.update_clock)

    def jendelaPembuatAlarm(self):
        if self.teksTombolAtur.get()=='stop':
            self.perintahSetAlarm()
        else :
            self.windowAlarm = Toplevel(self.parent)
            self.windowAlarm.wm_title("Mengatur alarm")

            self.frameHapus = Frame(self.windowAlarm)
            self.framLayar = Frame(self.windowAlarm)
            self.frameAlarm = Frame(self.windowAlarm)

            self.layarAlarm()
            self.scrollBar()
            self.buatComboBox()
            self.buatTombol()
            self.updateLayar()

    def buatComboBox(self):
        Label(self.frameAlarm, text='Jam : ').grid(row=0,column=0)
        self.alarmJam = StringVar()
        self.comboJam = Combobox(self.frameAlarm, textvariable=self.alarmJam,
                                state='readonly', width=2)
        self.comboJam['values'] = ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15',
                                     '16','17','18','19','20','21','21','22','23')
        self.comboJam.current(0)
        self.comboJam.grid(row=0,column=1)

        Label(self.frameAlarm, text='  Menit : ').grid(row=0,column=2)
        self.alarmMenit = StringVar()
        self.comboMenit = Combobox(self.frameAlarm, textvariable=self.alarmMenit,
                                state='readonly', width=2)
        self.comboMenit['values'] = ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15',
                                     '16','17','18','19','20','21','21','22','23','24','25','26','27','28','29','30',
                                     '31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46',
                                      '47','48','49','50','51','52','53','54','55','56','57','58','59')
        self.comboMenit.current(0)
        self.comboMenit.grid(row=0,column=3)

        self.frameAlarm.pack(pady=3)

    def buatTombol(self):
        self.tombolSet = Button(self.frameAlarm,textvariable=self.teksTombol,command=self.perintahSetAlarm).grid(row=0,column=4)
        self.kolomHapus = Entry(self.frameHapus, width=5)
        self.kolomHapus.grid(row=0,column=0)
        self.tombolSet = Button(self.frameHapus, text='Hapus', command=self.perintahHapus).grid(row=0, column=1)

        self.frameHapus.pack()

    def perintahSetAlarm(self):
        if self.teksTombol.get() == 'set' :
            masukan = self.comboJam.get()+' : '+self.comboMenit.get()
            tidakAda = True
            for i in self.antrianAlarm :
                if i == masukan :
                    tidakAda=False
            if tidakAda :
                self.tentukanUrutan(angka=masukan)
            self.updateLayar()
        else :
            self.teksTombol.set('set')
            self.teksTombolAtur.set('atur')
            self.alarmHidup=False
            try :
                pygame.mixer.music.stop()
            except :
                pass

    def layarAlarm(self):
        self.layar = Text(self.framLayar, height=5, width=35, state=DISABLED)
        self.layar.grid(row=0,column=0)
        self.framLayar.pack()

    def updateLayar(self):
        masukan=''
        for i in range(len(self.antrianAlarm)) :
            masukan += str(i+1)+". "+ self.antrianAlarm[i]+'\n'
        self.layar.config(state=NORMAL)
        self.layar.delete('1.0',END)
        self.layar.insert(END, masukan)
        self.layar.config(state=DISABLED)

    def perintahHapus(self):
        try:
            for i in range(len(self.antrianAlarm)) :
                if int(self.kolomHapus.get())-1 == i :
                    self.antrianAlarm.pop(i)
                    self.updateLayar()
                    break
        except :
            pass

    def tentukanUrutan(self, angka=0):
        if angka != 0 :
            self.antrianAlarm.append(angka)
        jarakJamPositif = []
        jarakJamNegatif = []
        convertInt = []
        antrianBaruPositif = []
        antrianBaruNegatif = []

        for i in self.antrianAlarm :
            angka = ''
            for j in i :
                if j != ':' and j != ' ' :
                    angka += j
            convertInt.append(angka)
            jarak = int(self.jam + self.menit) - int(angka)
            jarak *= -1

            if jarak <= 0:
                jarakJamPositif.append(jarak)
            elif jarak > 0 :
                jarakJamNegatif.append(jarak)

        jarakJamPositif.sort()
        jarakJamNegatif.sort()

        for i in jarakJamPositif :
            for j in range(len(convertInt)) :
                jarak = int(self.jam + self.menit) - int(convertInt[j])
                jarak *= -1
                if i == jarak :
                    antrianBaruPositif.append(self.antrianAlarm[j])

        for i in jarakJamNegatif :
            for j in range(len(convertInt)) :
                jarak = int(self.jam + self.menit) - int(convertInt[j])
                jarak *= -1
                if i == jarak :
                    antrianBaruNegatif.append(self.antrianAlarm[j])

        self.antrianAlarm = antrianBaruNegatif+antrianBaruPositif

    def scrollBar(self):
        scroll = Scrollbar(self.framLayar)
        scroll.grid(row=0,column=1, sticky=N+S)
        scroll.config(command=self.layar.yview)
        self.layar.config(yscrollcommand=scroll.set)

root = Tk()
app = MyApp(root)
mainloop()


Nah itu dia temen - temen code programnya... Gimana ? Cukup panjang juga yaa.. Tapi walau begitu, saya harap kalian bisa memahaminya dengan sebaik mungkin. Nah setelah kita melihat code programnya, lalu seperti apa ya tampilan aplikasi yang akan di hasilkan dari code program diatas? Yuk langsung saja kita simak sama  - sama tampilannya pada gambar di bawah ini...




Nah itu dia temen - temen tampilan awal dari code program diatas.. Nah lalu saya akan mencoba untuk menampilkan tampilan kedua yang fungsinya untuk mengatur alarmnya.. Seperti apakah tampilannya ? Lihat pada gambar di bawah ini ya temen - temen...




Nah itu dia temen - temen window kedua dari aplikasi jam analog multiple alarm ini. Di window ke dua ini kita bisa membuat alarm sebanyak mungkin.. Dan tentu saja kita bisa menghapusnya bila kita salah menginputkan alarm.. Dimana kotak putih tersebut merupakan sebuah text field yang saya fungsikan sebagai sebuah layar untuk menampilkan alarm yang telah terpasang nantinya.


Saya ingatkan kembali ya... Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu loh.. sehingga, nantinya kita cukup klik dua kali saja untuk menjalankan aplikasi ini... tanpa perlu repot - repot membuka nya di IDLE atau IDE python.. nah seperti apa caranya? cukup mudah kok.. dan saya juga sudah membuatkan tutorialnya.. untuk kalian yang menggunakan windows, KALIAN BISA KLIK DISINI ya temen - temen.. atau jika pada link pertama terlalu rumit, KALIAN BISA MENCOBA CARA INI ya.... dan bagi pengguna linux ? tenang saja.. bisa juga kok membuat file executable nya.. untuk melihat tutorialnya, KALIAN BISA KLIK DISINI temen - temen...

Penjelasan code program untuk membuat jam analog multiple alarm.


Nah setelah kita tau code programnya, bahkan sudah melihat tampilannya, maka selanjutnya saya akan mencoba untuk menjelaskan code program yang sudah saya bagikan tadi.. Hal ini saya laukan agar kalian bisa lebih memahami code programnya ya.. Nah langsung saja yuk kita simak sama - sama penjelasan nya...

[NOTE : Teks yang berwarna merah pada penjelasan merupakan "Code program" yang di tambahkan pada versi kali ini. Dan tidak ada di versi sebelumnya]

from tkinter import *  //code ini digunakan untuk mengimport semua modul tkinter. Yang di tandai dengan tanda bintang.
from tkinter.ttk import Combobox  //code ini digunakan untuk mengimport combobox dari tkinter.
import time  //code ini digunakan untuk mengimport modul ‘time’ yang di sediakan oleh python. Dan akan saya gunakan untuk mendapatkan waktu di komputer kalian.
from math import cos,sin,pi  //code ini digunakan untuk mengimport operasi matematika yang disediakan oleh python. Yaitu cos, sin, pi. Yang akan digunakan untuk memutar jarum jam nantinya.
import pygame  //code ini digunakan untuk mengimport modul pygame untuk memutar nada alarm nya. Untuk menginstall Pygame nya, KALIAN BISA KLIIK DISINI.

class MyApp():  //code ini digunakan untukembuat sebbuah class dengan nama “MyApp”. 
    def __init__(self, root):  //code ini digunakan untuk membuat sebuah construktor dari class ‘MyApp’ tadi.. Construktor merupakan sebuah metode yang akan di jalankan pertama kali ketika class tersebbut di panggil.

        self.size=300  //code ini digunakan untuk meng inisialisasi variabel ‘size’ Yang akan digunakan untuk menentukan jarak perpindahan jarum jam analog nya.
        self.parent=root  //code ini digunakan untuk menampung parent atau root dari class ini nantinya.

        self.frameJam = Frame(root)  //code ini digunakan untukmembuat sebuauah frame atau tempat dari jam analognya.
        self.frameAlarm=Frame(root)  //digunakan untuk membuat frame alarm atau tombol alarm di window jam analognya.
        self.framePemberitahuan=Frame(root)  //code ini digunakan untuk membuat frame pemberitahuan alarm selanjutnya yang akan hidup nantinya pada window.

        self.alarmHidup = False  //code ini digunakan menentukan apakah alarm sedang hidup atau tidak.
        self.teksJam = StringVar()  //code ini digunakan untuk menampilkan teks jam 
        self.antrianAlarm = []  //code ini digunakan untuk menampung setiap alarm yang di buat nantinya.
        self.hidupMati = BooleanVar(False)  //code ini digunakan sebagai nilai penentu apakah alarm hidup atau hidup.
        self.fileMusik = 'hysteria.mp3'  //code ini digunakan untuk inisialisasi atau penentu musik yang akan kita gunakan sebagai nada alarm nantinya. Silahkan isikan nama dan formatnya saja jika file mp3 nya berada 
        self.teksTombolAtur = StringVar(value='atur')  //code ini digunakan sebagai teks tombol untuk mengatur alarm.


        self.teksTombol = StringVar(value='set')  //code ini digunakan sebagai teks dari tombol alarm nya.

        self.buatFrameJam()   //code ini digunakan untuk memanggil metode dengan nama “buatFrameJam”
        self.buatJarum()   //code ini digunakan untuk memanggil metode dengan nama “buatJarum”
        self.buatTeksAngka()   //code ini digunakan untuk memanggil metode dengan nama “buatTeksAngka”
        self.buatTeks()   //code ini digunakan untuk memanggil metode dengan nama “buatTeks”
        self.update_clock()   //code ini digunakan untuk memanggil metode dengan nama “update_clock”

    def buatTeks(self):  //digunakan untuk membuat sebuah  metode dengan nama “buatTeks” yang akan digunakan untuk menapilkan teks.
        self.teks = Label(text="mn-belajarpython.blogspot.com")  //code ini digunakan untuk membuat label atau teks. Yang di simpan ke dalam variabel ‘teks’
        self.teks.pack()  //digunakan untuk memasukkan teks tadi ke dalam window jamnya.

        self.teksPemberitahuan = Label(self.framePemberitahuan, text='Tidak ada alarm terpasang.', bg="white")  //code ini digunakan  untuk membuat sebuah labrl untuk pemberitahuan. Dengan settingan yang sudah saya atur. Yaitu dengan background putih ya. Silahkan cek screenshoot tampilan untuk melihat hasilnya.
        self.teksPemberitahuan.grid(row=0, column=0)  //code ini digunakan untuk memasukkan teks pemberitahuan tadi ke dalam window.

        self.tombolAtur= Button(self.framePemberitahuan, textvariable=self.teksTombolAtur, command=self.jendelaPembuatAlarm)  //code ini digunakan untuk membuat tombol dengan perintah untuk memanggil jendela pengatur alarm nya.
        self.tombolAtur.grid(row=0, column=1)  //code ini digunakan untuk memasukkan tombol atur ke dalam window.

        self.framePemberitahuan.pack()  //memasukkan frame yang di tanpung kedalam variabel “framePemberitahuan” ke dalam window.

    def buatFrameJam(self):  //code ini digunakan untuk membuat sebuah metode dengan nama ‘buatFrameJam” yang tentu saja akan digunakan untuk membuat atau menyetting frame/tempat jam analognya.
        root.title("Clock")  //code ini digunakan untuk merubah judul windownya.
        self.w = Canvas(self.frameJam,width=320, height=320, relief= "sunken", border=10)  //code ini digunakna untukmembuat / menginisialisasi canvasnya. Kanvas ini digunakan sebagai tempat jam analognya. Dengan kanvas, kita bisa membuat sebuah garis untuk jarum jamnya.
        self.w.pack()  //code ini digunakan untuk memasukkan canvas nya ke dalam frame ‘frameJam’ yang telah kita masukkan sebagai parent canvasnya.
        self.frameJam.pack()  //code ini digunakan untuk memasukkan frame jam nya ke dalam window utama.

    def buatJarum(self):  //code ini digunakan untuk membuat sebuah metode untuk membuat jarum jamnya.
        self.w.create_line(0,0,0,0, fill="red", tags="hour", width=3)  //digunakan untuk membuat jarum detik dengan warna merah.
        self.w.create_line(0,0,0,0, fill="black", tags="minute", width=6)  //digunakan untuk membuat jarum menit dengan warna hitam.
        self.w.create_line(0,0,0,0, fill="black", tags="second", width=6)  //digunakan untuk membuat jarum jam dengan warna hitam.

    def buatTeksAngka(self):  //code ini digunakan untuk membuat metode yang akan digunakan untuk membuat angka - angka jam nya.
        Label(self.frameJam, text="12").place(x=160, y=13)  //digunakan untuk membuat sekaligus memasukkan angka 12 ke dalam window.
        Label(self.frameJam, text="11").place(x=80, y=28)  //digunakan untuk membuat sekaligus memasukkan angka 11 ke dalam window.
        Label(self.frameJam, text="10").place(x=31, y=90)  //digunakan untuk membuat sekaligus memasukkan angka 10 ke dalam window.
        Label(self.frameJam, text="9").place(x=11, y=157)  //digunakan untuk membuat sekaligus memasukkan angka 9 ke dalam window.
        Label(self.frameJam, text="8").place(x=31, y=230)  //digunakan untuk membuat sekaligus memasukkan angka 8 ke dalam window.
        Label(self.frameJam, text="7").place(x=80, y=285)  //digunakan untuk membuat sekaligus memasukkan angka 7 ke dalam window.
        Label(self.frameJam, text="6").place(x=160, y=303)  //digunakan untuk membuat sekaligus memasukkan angka 6 ke dalam window.
        Label(self.frameJam, text="5").place(x=240, y=285)  //digunakan untuk membuat sekaligus memasukkan angka 5 ke dalam window.        Label(self.frameJam, text="4").place(x=291, y=230)  //digunakan untuk membuat sekaligus memasukkan angka 4 ke dalam window.
        Label(self.frameJam, text="3").place(x=310, y=157)  //digunakan untuk membuat sekaligus memasukkan angka 3 ke dalam window.
        Label(self.frameJam, text="2").place(x=291, y=90)  //digunakan untuk membuat sekaligus memasukkan angka 2 ke dalam window.
        Label(self.frameJam, text="1").place(x=240, y=28)  //digunakan untuk membuat sekaligus memasukkan angka 1 ke dalam window.

    def update_clock(self):  //digunakan untuk mengupdate posisi jam sesuai dengan jam terkini pada laptop / komputer anda.
        s=time.localtime()[5]  //digunakan untuk mendapatkan detik dari waktu komputer. Yang kemudian di tampung kedalam variabel ‘s’.
        m=time.localtime()[4]  //digunakan untuk mendapatkan menit dari waktu komputer. Yang kemudian di tampung kedalam variabel ‘m’.
        h=time.localtime()[3]  //digunakan untuk mendapatkan jam dari waktu komputer. Yang kemudian di tampung kedalam variabel ‘h’.

        jam = time.strftime("%H", time.localtime())  //code ini digunakan untuk mendapatkan nilai jam di komputer/laptop kalian yang di konvert menjadi string. Dan ditampung ke dalam variabel “jam”.
        menit = time.strftime("%M", time.localtime())  //code ini digunakan untuk mendapatkan nilai menit di komputer/laptop kalian yang di konvert menjadi string. Dan ditampung ke dalam variabel “me”.
        detik = time.strftime("%S", time.localtime())  //code ini digunakan untuk mendapatkan nilai detik di komputer/laptop kalian yang di konvert menjadi string. Dan ditampung ke dalam variabel “detik”.

        cocok = self.jam + ' : ' + self.menit   //code ini digunakan untuk menampung format jam dan menit seperti alarm yang terlah di set. Lalu di tampung ke dalam variabel ‘cocok’.

        if len(self.antrianAlarm):  //code ini digunakan untuk mengecek apakah list dalam variabel “antrianAlarm” tidak kosong.
            self.teksPemberitahuan.config(text="alarm selanjutnya -> "+self.antrianAlarm[0])  //code ini digunakan untuk mengubah teks pemberitahuan menjadi alarm yang akan berbunyi selanjutnya.
            if cocok == self.antrianAlarm[0] and (detik == '00'):  //code ini menyeleksi apakahjam terkini yang di tammpung kedalam variabel ‘cocok’ sama dengan alarm terdekat di dalam antrian alarm dan apakah detiknya sama dengan 0.
                self.teksTombol.set('stop')  //code ini digunakan untuk mengubah tombol untuk mengatur  alarm menjadi “stop”.
                self.antrianAlarm.pop(0)  //code ini digunakan untuk menghapus alarm yang telah di bunyikan dari antrian alarm nya.
                self.alarmHidup = True  //mengubah nilai dalam variabel “alarm hidup” menjadi true yang artinya alarm sedang hidup.
                self.teksTombolAtur.set('stop')  //code ini digunakan untuk mengubah tombol untuk mengatur  alarm menjadi “stop”.

                pygame.init()  //untuk inisialisasi pygame nya.
                pygame.mixer.init()  //inisialisasi elemen pemutar musiknya.
                pygame.mixer.music.load(self.fileMusik)  //untuk memuat file yang dimaksud. Yang lokasinya berada pada variabel “fileMusik”.
                pygame.mixer.music.play()  //code ini digunakan untuk memutar musik yang sudah di mmuat sebelumnya.
        else :  //code ini akan dijalankan ketika antrian alarm kosong.
            self.teksPemberitahuan.config(text='Tidak ada alarm terpasang.')  //code ini digunakan untuk mengubah teks pemberitahuan menjadi “tidak ada alarm terpasang”.


        if self.alarmHidup and pygame.mixer.music.get_busy()==False :  //code ini digunakan untuk mengecek apakah “alarmHidup” berinilai true. Yang menandakan alarem dudah terpasang. Dan apakah musik sudah selesai.
            self.perintahSetAlarm()  //code ini digunakan untuk memanggil metode dengan nama “perintahSetAlrm”.


        degrees = 6*s
        angle = degrees*pi*2/360
        ox = 165
        oy = 165
        x = ox + self.size*sin(angle)*0.45
        y = oy - self.size*cos(angle)*0.45
        self.w.coords("hour", (ox,oy,x,y))

//code diatas digunakan untuk mendapatkan nilai yang tepat dari jarum detik. Dengan menghitung dari berbagai elemen seperti yang ada di atas. Di mana code terakhir merupakan perintah untuk memindahkan jarum detik sesuai koordinat yang telah di peroleh setelah menghitungnya.

        degrees1 = 6*m
        angle1 = degrees1*pi*2/360
        ox1 = 165
        oy1 = 165
        x1 = ox1 + self.size*sin(angle1)*0.4
        y1 = oy1 - self.size*cos(angle1)*0.4
        self.w.coords("minute", (ox1,oy1,x1,y1))

//code diatas digunakan untuk mendapatkan nilai yang tepat dari jarum menit. Dengan menghitung dari berbagai elemen seperti yang ada di atas. Di mana code terakhir merupakan perintah untuk memindahkan jarum menit sesuai koordinat yang telah di peroleh setelah menghitungnya

        degrees2 = 30*h
        angle2 = degrees2*pi*2/360
        ox2 = 165
        oy2 = 165
        x2 = ox2 + self.size*sin(angle2)*0.2
        y2 = oy2 - self.size*cos(angle2)*0.2
        self.w.coords("second",(ox2,oy2,x2,y2))


//code diatas digunakan untuk mendapatkan nilai yang tepat dari jarum jam. Dengan menghitung dari berbagai elemen seperti yang ada di atas. Di mana code terakhir merupakan perintah untuk memindahkan jarum jam sesuai koordinat yang telah di peroleh setelah menghitungnya

        self.parent.after(1000, self.update_clock)  //code ini digunakan agar metode ‘update_clock’ akn selalu  di jalankan selama 1000 milidetik sekali setelah program di jalankan.

    def jendelaPembuatAlarm(self):  //code ini digunakan untuk membuat metode baru yang akan digunakan untuk membuat window baru untuk mengatur alarm.
        if self.teksTombolAtur.get()=='stop':  //code ini digunakan untuk mengecek apakah teks tombol untuk memanggil metode ini teks nya adalah “stop”.
            self.perintahSetAlarm()  //code ini digunakan untuk memanggil metode dengan nama “perintahSetAlarm”.
        else :  //code ini akan di jalankan ketika teks dari tombol untukmemanggil metode ini tidak sama dengan ‘stop’.
            self.windowAlarm = Toplevel(self.parent)  //code ini digunakn untuk membuat window baru. Dan  kemudian di tampung ke dalam variabel “windowAlarm”
            self.windowAlarm.wm_title("Mengatur alarm")  //code ini digunakan untuk mengubah window alarm tadi dengan judul “mengatur alarm”

            self.frameHapus = Frame(self.windowAlarm)  //code ini digunakan untuk membuat frame baru yang akan digunakan untuk meletakkan tombol hapus. Yang di simpan ke dalam variabel “frameHapus”.
            self.framLayar = Frame(self.windowAlarm)  //code ini digunakan untuk membuat frame baru yang akan digunakan untuk meletakkan layar untuk menampilkan alarmnya. Yang di simpan ke dalam variabel “framlayar”.
            self.frameAlarm = Frame(self.windowAlarm)  //code ini digunakan untuk membuat frame baru yang akan digunakan untuk meletakkan elemen - elemen untuk membuat alarm. Yang di simpan ke dalam variabel “frameAlarm”.

            self.layarAlarm()  //code ini digunnakan untuk memanggil metode dengan nama “layarAlarm”.
            self.scrollBar()  //code ini digunnakan untuk memanggil metode dengan nama “scrollBar”.
            self.buatComboBox()  //code ini digunnakan untuk memanggil metode dengan nama “buatComboBox”.
            self.buatTombol()  //code ini digunnakan untuk memanggil metode dengan nama “layarTombol”.
            self.updateLayar()  //code ini digunnakan untuk memanggil metode dengan nama “updateLayar”.

    def buatComboBox(self):  //code ini digunakan untuk membuat sebuah metode dengan nama “buatComboBox”. Yang tentu saja akan digunakan untuk membuat Combobox.
        Label(self.frameAlarm, text='Jam : ').grid(row=0, column=0) //code ini digunakan untuk membuat label atau teks yang langsung dimasukkan ke dalam window.
        self.alarmJam = StringVar()  //ini sialisasi variabel “alrmJam”.
        self.comboJam = Combobox(self.frameAlarm, textvariable=self.alarmJam, state='readonly', width=2) //code ini digunakan untuk membuat sebuah combobox. Dengan settingan yang sudah saya tentukan di dalamnya. Yaitu “self.frameAlarm” sebagai tempat framenya. “texvareable=self.alarmJam” sebagai variabel yang menampung nilai yang terpilih. “state=’readonly’” agar tidak bisa di edit.
        self.comboJam['values'] = (
            '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15',
            '16', '17', '18', '19', '20', '21', '21', '22', '23', '24')  //untuk memasukkan angka2 ini sebagai item dari combobox yg sudah kita bua tadi.
        self.comboJam.current(0)  //untuk memilih item pertama sebagai nilai default dari combobox nya.
        self.comboJam.grid(row=0, column=1)  //code ini digunakan untuk memasukkan combobox di dalam “combojam” ke dalam window.

        Label(self.frameAlarm, text='  Menit : ').grid(row=0, column=2)  //code ini digunakan untuk membuat label atau teks dengan isi “Menit :”. Yang langsung di masukkan ke dalam window.
        self.alarmMenit = StringVar()  //code ini digunakan untuk menginisialisasi variabel “alarmMenit”.
        self.comboMenit = Combobox(self.frameAlarm, textvariable=self.alarmMenit, state='readonly', width=2)  //code ini digunakan untuk membuat comboBox. Dengan settingan “self.frameAlarm” sebagai tempat di dalam window. “textvariable=self.alarmMenit” yang di gunakan untuk mendapatkan nilai yang terpilih. “state=’readonly’” agar comboBox nya  tidak bisa di edit. “width=2” yang artinya lebarnya sebesar 2.
        self.comboMenit['values'] = ( '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59')  //code ini digunakan untuk memasukkan angka2 tersebut sebagi item dari combobox dalam variable “comboMenit”.
        self.comboMenit.current(0)  //code ini digunakan untuk mengatur item pertama sebagai nilai default.
        self.comboMenit.grid(row=0, column=3)  //code ini digunakan untuk memasukan combobox nya ke dalam window.

        self.frameAlarm.pack(pady=6)  //digunakan untuk memberikan jarak di bawah frame “frameAlarm”.

    def buatTombol(self):  //code ini digunakan membuat sebuah metode dengan nama”buatTombol”. Yang akan digunakan untuk membuat sebuah tombol.
        self.tombolSet = Button(self.frameAlarm, textvariable=self.teksTombol, command=self.perintahSetAlarm).grid(
            row=0, column=4)  //code ini digunakan untuk membuat serta memasukkan tombol kedalam window. Dengan perintah ketika di klik akan menjalankan metode “perintahSetAlarm” 

        self.kolomHapus = Entry(self.frameHapus, width=5)  //code ini digunakan untuk membuat kolom untuk memasukkan nomer untuk di hapus.
        self.kolomHapus.grid(row=0,column=0)  //code ini digunakan untuk memasukkan kolom tersebut ke dalam window.
        self.tombolSet = Button(self.frameHapus, text='Hapus', command=self.perintahHapus).grid(row=0, column=1)  //code ini digunakan untuk membuat tombol untuk perintah hapusnya. Yang kemudian langsung saya masukkan ke dalam window.

        self.frameHapus.pack() //code ini digunakan untuk memasukkan frame tempat kolom dan tombol hapus ke dalam window.


    def perintahSetAlarm(self):  //code ini digunakan untuk membuat metode dengan nama “perintahSetAlarm”.
        if self.teksTombol.get() == 'set':  //digunakan untuk mengecek teks tombol nya. Apakah nilainya sama dengan ‘set’ atu tidak.
            masukan = self.comboJam.get()+' : '+self.comboMenit.get()  //code ini digunakan untuk mengambil data dari combobox untuk menentukan alarm nya. Yang kemudian di satukan lalu di simpan ke dalam variabel “masukan”.
            tidakAda = True  //meng inisialisasi variabel “tidakAda” yang saya beri nilai True.
            for i in self.antrianAlarm :
                if i == masukan :
                    tidakAda=False
//code perulangan di atas digunakan untuk mengecek apakah ada yang sama atau tidak.
            if tidakAda :  //mengecek apakah ada antrian yang sama dengan alarm baru yang akan di masukkan.
                self.tentukanUrutan(angka=masukan)  //code ini digunakan untuk memasukkan alarm ke dalam antrian alarm yang sekaligus mengurutkannya Dari yang terdekat.
            self.updateLayar()  //code ini digunakan untuk memanggil sebuah metode dengan nama “updateLayar”
        else:  //kondisi yang akan di jalankan ketika “if self.teksTombol.get()==’set’ :” bernilai false. Yang artinya, teks tombolnya bukan ‘set’.
            self.teksTombol.set('set')
            self.teksTombolAtur.set('atur')
            self.alarmHidup=False  //code ini  digunakan untuk mengubah nilai variabel “alarmHidup” menjadi False. Yang artinya alarm kita matikan.
            try:  //digunakan untuk mencoba sebuah code program.
                pygame.mixer.music.stop()  //code ini digunakan untuk menghentikan musik atau nada alarmnya.
            except:  //code ini digunakan untuk menjalankan code program ketika code program “try” terjadi error.
                pass  //digunakan agar kita di perbolehkan untuk tidak menjalankan code program.


    def layarAlarm(self):  //code ini merupkan sebuah metode sebagai tempat untuk membuat sebuah layar untuk menampilkan informasi alarm - alarm yang telah di buat.
        self.layar = Text(self.framLayar, height=5, width=35, state=DISABLED)  //code ini digunakan untuk membuat layar alarm nya dengan settingan yang sudah di buat. Yaitu “self.frameLayar” merupakan tempat penempatan layarnya. “height=5 dan width=5” merupakan settingan ukuran lebar dan tinggi. Dan “state=DISABLED” digunakan agar tidak bisa di edit.
        self.layar.grid(row=0,column=0)BUI  //code ini digunakan untuk memsukkan layar ke dalam frame dengan variabel “framLayar”.
        self.framLayar.pack()  //code ini digunakan untuk memasukkan frame pada variabel “framLayar” ke dalam window.

    def updateLayar(self):  //code ini digunakan untuk membuat metode dengan fungsi untuk mengupdate layar alarm nya.
        masukan=''  //inisialisasi atau membuat sebuah variabel “ masukan”  dengan nilai kosong.
        for i in range(len(self.antrianAlarm)) :  //perulangan sebanyak alarm yang telah di buat. Atau yang ada di dalam antrian alarm
            masukan += str(i+1)+". "+ self.antrianAlarm[i]+'\n'  //code ini digunakan untuk menggabungkan semua alarm yang ada pada antrian alarm. Dan kita tampung ke dalam variabel “masukan”.
        self.layar.config(state=NORMAL)  //code ini digunakan untuk membuat layar agar bisa di edit.
        self.layar.delete('1.0',END)  //code ini digunakan untuk menghapus semua isi layar.
        self.layar.insert(END, masukan)  //code ini digunakan untuk memasukkan antrian alarm yang sudah kita gabungkan tadi. Dan kita tampung ke dalam variabel “masukan”.
        self.layar.config(state=DISABLED)  //code ini digunakan untuk membuat layar tidak bisa di edit.

    def perintahHapus(self):  //code ini digunakan untuk membuat metode yang akan digunakan untuk menghapus sebuah alarm yang telah terpasang..
        try:  //digunakan untuk mencoba code di bawah.
            for i in range(len(self.antrianAlarm)) :  //code ini digunakan untuk melakukan perulangan sebanyak antrian alarm.
                if int(self.kolomHapus.get())-1 == i :  //code ini digunakan untuk mengambildata dari “kolomHapus” yang merupakan tempat memasukkan angka sesuai urutan alarm yang ingin kita hapus. Sekaligus mengecek apakah angka yang dimasukkan ada pada antrian.
                    self.antrianAlarm.pop(i)  //membuang alarm yang di hapus dari antrian.
                    self.updateLayar()  //code ini digunakan untuk memanggil sebuah metode dengan nama “updateLayar”.
                    break  //code ini digunakan untuk menghentikan perulangan apabila sudah ada yang cocok.
        except :  //code yang akan di jalan kan ketika terdapat error pada code program “try” di atas.
            pass  //agar tidak melakukan perintah apapun.

    def tentukanUrutan(self, angka=0): //code ini dogimalam untuk membuat sebuah metode yang akan digunakan untuk memasukkan alarm baru yang sekaligus mengurutkannya dari alarm terdekat hingga ter jauh.
        if angka != 0 :  //code ini digunakan untuk mengecek apakah amgka tidak bernilai nol.
            self.antrianAlarm.append(angka)  //code omo digunakan untuk memasukkan alarm ke dalam antrian.
        jarakJamPositif = []  //code ini digunakan untuk inisialisasi variabel yang saya isi dengan list kosong.
        jarakJamNegatif = []  //inisialisasi variabel dengan isi list kosong.
        convertInt = [] 
        antrianBaruPositif = []
        antrianBaruNegatif = []

//code di bawah ini merupakah code program yang menggunakan untuk mengurutkan yang terdekat hingga yang terjauh. Saya kesulitan untuk menjelaskannya ya. Jadi mohon maaf saya tidak bisa menjelaskannya lebih jauh. Sekali lagi mohon maaf ya..

        for i in self.antrianAlarm :
            angka = ''
            for j in i :
                if j != ':' and j != ' ' :
                    angka += j
            convertInt.append(angka)
            jarak = int(self.jam + self.menit) - int(angka)
            jarak *= -1

            if jarak <= 0:
                jarakJamPositif.append(jarak)
            elif jarak > 0 :
                jarakJamNegatif.append(jarak)

        jarakJamPositif.sort()
        jarakJamNegatif.sort()

        for i in jarakJamPositif :
            for j in range(len(convertInt)) :
                jarak = int(self.jam + self.menit) - int(convertInt[j])
                jarak *= -1
                if i == jarak :
                    antrianBaruPositif.append(self.antrianAlarm[j])

        for i in jarakJamNegatif :
            for j in range(len(convertInt)) :
                jarak = int(self.jam + self.menit) - int(convertInt[j])
                jarak *= -1
                if i == jarak :
                    antrianBaruNegatif.append(self.antrianAlarm[j])

        self.antrianAlarm = antrianBaruNegatif+antrianBaruPositif

    def scrollBar(self):  //metode yang digunakan untuk membuat scrollbar pada layar.
        scroll = Scrollbar(self.framLayar)  //membuat scrollbar yang di tampung ke dalam variabel “scroll”
        scroll.grid(row=0,column=1, sticky=N+S)  //memasukkan scrollbar ke window.
        scroll.config(command=self.layar.yview)  //memberikan perintah untuk menggeser posisi horizontal.
        self.layar.config(yscrollcommand=scroll.set)  //menghubungkan scrollbar dengan layar.

root = Tk()  //code ini digunakan untuk memanggil window dari tkinter yang kemudian di tampung ke dalam variabel ‘root’.
app = MyApp(root)   //digunakan untuk memanggil class MyApp yang sudah kita masukkan tadi. Dan memasukkan root sebagai parent.

mainloop()  //digunakan agar window yanng kita buat tidak langsung selesai atau langsung close secara otomatis



Nah itu dia temen - temen penjelasan code programnya.. Semoga kalian terbantu untuk memahami code program yang sudah saya bagikan di atas ya temen - temen.. Ya walaupun penjelasannya terlihat tidak menarik untuk di baca.. Hehe..

Terakhir kalinya saya ingatkan kembali... Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu loh.. sehingga, nantinya kita cukup klik dua kali saja untuk menjalankan aplikasi ini... tanpa perlu repot - repot membuka nya di IDLE atau IDE python.. nah seperti apa caranya? cukup mudah kok.. dan saya juga sudah membuatkan tutorialnya.. untuk kalian yang menggunakan windows, KALIAN BISA KLIK DISINI ya temen - temen.. atau jika pada link pertama terlalu rumit, KALIAN BISA MENCOBA CARA INI ya.... dan bagi pengguna linux ? tenang saja.. bisa juga kok membuat file executable nya.. untuk melihat tutorialnya, KALIAN BISA KLIK DISINI temen - temen...



Oke sampai disini dulu ya temen - temen postingan saya mengenai cara membuat jam analog dengan menggunakan alarm yang bisa kita tambah sebanyak mungkin ini ya.. Ya saya harap postingan ini dapat bermanfaat bagi kalian.. Oke terimakasih sudah berkunjung ke blog sederhana saya ini.. Semoga apa yang kita dapatkan disini dapat bermanfaat bagi kita.. Terimakasih dan jangan lupa untuk membaca tutorial saya yang lainnya.

Wassalamualaikum wr. wb.
Previous
Next Post »
Thanks for your comment