Arkadaşlar canım sıkıldığı için ve hiragana(japonyada kullanılan bir hece sistemi) da kendimi geliştirmek adına yazdığım bir uygulama ayrıca ses desteği var, her heceyi sesli bir şekilde öğretiyor ama istenilirse romaji yani bizim kullandığım alfabedeki hallerini hecelerin widgetlarının üstüne mousenizi getirirseniz görebilirsiniz
gerekli modüller: playsound, tkinter.ttk, tkinter.tix (tkinter ile alakalılar default gelmiş olabilir)
source:
import os
from tkinter import *
from tkinter.tix import *
from tkinter import ttk, font
from playsound import playsound
class HiraMana:
normal = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん"
dakuten = "がぎぐげござじずぜぞだぢづでどばびぶべぼ"
handakuten = "ぱぴぷぺぽ"
romaji = ['a', 'i', 'u','e','o',
'ka', 'ki','ku', 'ke',
'ko', 'sa','shi', 'su',
'se', 'so','ta', 'chi',
'tsu','te','to', 'na',
'ni', 'nu','ne', 'no',
'ha', 'hi','fu', 'he',
'ho', 'ma','mi', 'mu',
'me', 'mo','ya', 'yu',
'yo', 'ra','ri', 'ru',
're', 'ro','wa', 'wo',
'n', 'ga','gi', 'gu',
'ge', 'go','za', 'ji',
'zu', 'ze','zo', 'da',
'ji', 'zu','de', 'do',
'ba', 'bi','bu', 'be',
'bo', 'pa','pi', 'pu',
'pe', 'po']
hiraganaMap = dict(zip(normal+dakuten+handakuten, romaji))
romajiMap = dict(zip(romaji, normal+dakuten+handakuten))
def __init__(self, ):
self.root = Tk()
self.root.title("HiraMana")
self.root.resizable(False, False)
self._FONT = font.Font(family='Helvetica', size=22, weight='bold')
self.widgets = {"Normal": {"tabframe": None, "bottomframe": None, "chartbuttons": []},
"Dakuten": {"tabframe": None, "bottomframe": None, "chartbuttons": []},
"Handakuten":{"tabframe": None, "bottomframe": None, "chartbuttons": []}}
self.tabControl = ttk.Notebook(self.root)
self.balloon = Balloon(self.root,bg="white", title="Romaji")
self.balloon.subwidget('message')['fg'] = "red"
self.balloon.subwidget('message')['font'] = self._FONT
for sub in self.balloon.subwidgets_all(): # Change background of balloon widget
sub.config(bg='light grey')
self.__initWidgets()
def __initWidgets(self):
def normalForm():
self.widgets["Normal"]["tabframe"] = Frame(self.root)
self.widgets["Normal"]["bottomframe"] = Frame(self.widgets["Normal"]["tabframe"], bg="gray")
for hc in self.normal:
path = os.path.join("sounds",f"{self.hiraganaMap[hc]}.mp3") # Safe way of paths
hiraButton = Button(self.widgets["Normal"]["bottomframe"])
hiraButton["text"] = hc
hiraButton["font"] = self._FONT
hiraButton["command"] = lambda path=path:playsound(path, False)# path=path->lambda looks up the variable name at the time the function is called
self.balloon.bind_widget(hiraButton, balloonmsg=self.hiraganaMap[hc])
self.widgets["Normal"]["chartbuttons"].append(hiraButton)
def dakutenForm():
self.widgets["Dakuten"]["tabframe"] = Frame(self.root)
self.widgets["Dakuten"]["bottomframe"] = Frame(self.widgets["Dakuten"]["tabframe"], bg="gray")
for hc in self.dakuten:
path = os.path.join("sounds",f"{self.hiraganaMap[hc]}.mp3") # Safe way of paths
hiraButton = Button(self.widgets["Dakuten"]["bottomframe"])
hiraButton["text"] = hc
hiraButton["font"] = self._FONT
hiraButton["command"] = lambda path=path:playsound(path, False)# path=path->lambda looks up the variable name at the time the function is called
self.balloon.bind_widget(hiraButton, balloonmsg=self.hiraganaMap[hc])
self.widgets["Dakuten"]["chartbuttons"].append(hiraButton)
def handakutenForm():
self.widgets["Handakuten"]["tabframe"] = Frame(self.root)
self.widgets["Handakuten"]["bottomframe"] = Frame(self.widgets["Handakuten"]["tabframe"], bg="gray")
for hc in self.handakuten:
path = os.path.join("sounds",f"{self.hiraganaMap[hc]}.mp3") # Safe way of paths
hiraButton = Button(self.widgets["Handakuten"]["bottomframe"])
hiraButton["text"] = hc
hiraButton["font"] = self._FONT
hiraButton["command"] = lambda path=path:playsound(path, False)# path=path->lambda looks up the variable name at the time the function is called
self.balloon.bind_widget(hiraButton, balloonmsg=self.hiraganaMap[hc])
self.widgets["Handakuten"]["chartbuttons"].append(hiraButton)
normalForm()
dakutenForm()
handakutenForm()
def loop(self):
def drawChart(widgets, chart):
idx = 0
for y in range(len(chart)):
for x in range(chart[y]):
widgets[idx].grid(row = y, column = x)
idx += 1
def normalForm():
self.widgets["Normal"]["bottomframe"].grid(row=1, column=0, columnspan=3, padx=10, pady=10, sticky=E+W+N+S)
self.widgets["Normal"]["tabframe"].columnconfigure(0, weight=1)
self.widgets["Normal"]["tabframe"].rowconfigure(1, weight=1)
drawChart(self.widgets["Normal"]["chartbuttons"], [10,10,10,10,6])
def dakutenForm():
self.widgets["Dakuten"]["bottomframe"].grid(row=1, column=0, columnspan=3, padx=10, pady=10, sticky=E+W+N+S)
self.widgets["Dakuten"]["tabframe"].columnconfigure(0, weight=1)
self.widgets["Dakuten"]["tabframe"].rowconfigure(1, weight=1)
drawChart(self.widgets["Dakuten"]["chartbuttons"], [10,10])
def handakutenForm():
self.widgets["Handakuten"]["bottomframe"].grid(row=1, column=0, columnspan=3, padx=10, pady=10, sticky=E+W+N+S)
self.widgets["Handakuten"]["tabframe"].columnconfigure(0, weight=1)
self.widgets["Handakuten"]["tabframe"].rowconfigure(1, weight=1)
drawChart(self.widgets["Handakuten"]["chartbuttons"], [5])
normalForm()
dakutenForm()
handakutenForm()
self.tabControl.add(self.widgets["Normal"]["tabframe"], text= "Normal Form")
self.tabControl.add(self.widgets["Dakuten"]["tabframe"], text= "Dakuten Form")
self.tabControl.add(self.widgets["Handakuten"]["tabframe"],text= "Handakuten Form")
self.tabControl.pack(expand = 1, fill ="both")
self.root.mainloop()
if __name__ == '__main__':
hira = HiraMana()
hira.loop()
klasor ve dosya hiyerarşisi:
main.py → source
sounds → dir
sesleri nasıl paylaşabileceğim hakkında fikir verirseniz sevinirim .