Merhaba, artık fazla python ile uğraşmasamda uzun zaman önce yaptığım bir projeyi düzenlemek istemiştim ancak nedense hiçbir sorun gözükmemesine rağmen koddaki tanımlı widgetların ekranda gözükmediğini fark ettim
sizce sorun ne olabilir?
import os
from tkinter import *
from tkinter.tix import *
from tkinter import ttk, font
from playsound import playsound
class Hiragana:
kanaForms = {"normal": "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん",
"dakuten": "がぎぐげござじずぜぞだぢづでどばびぶべぼ",
"handakuten": "ぱぴぷぺぽ"}
romajiForm = ('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')
kanaMap = dict(zip("".join(kanaForms.values()), romajiForm))
class HiraMana:
def __init__(self, root, font):
self.root = root
self.font = font
self.soundPaths = dict(zip(Hiragana.romajiForm,
(os.path.join("sounds",f"{ch}.mp3") for ch in Hiragana.romajiForm)))
self.widgets = {"normal": {"tabframe": None,
"frame": None,
"chartbuttons": []},
"dakuten": {"tabframe": None,
"frame": None,
"chartbuttons": []},
"handakuten":{"tabframe": None,
"frame": None,
"chartbuttons": []}}
self.__initWidgets()
def __initBaloonWidget(self):
self.balloon = Balloon(self.root,bg="white", title="Romaji")
self.balloon.subwidget('message')['fg'] = "red"
self.balloon.subwidget('message')['font'] = self.font
for widgetMap in self.widgets.values():
for button in widgetMap["chartbuttons"]:
self.balloon.bind_widget(button, balloonmsg=button["text"])
for sub in self.balloon.subwidgets_all():
sub.config(bg='light grey')
def __initButtonWidgets(self):
for key, form in Hiragana.kanaForms.items():
for hchar in form:
hiraButton = Button(self.widgets[key]["frame"])
hiraButton["text"] = hchar
hiraButton["font"] = self.font
hiraButton["command"] = lambda path=self.soundPaths[Hiragana.kanaMap[hchar]]: playsound(path, False)
self.widgets[key]["chartbuttons"].append(hiraButton)
def __initNotebookWidget(self):
self.tabControl = ttk.Notebook(self.root)
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")
def __initFrameWidgets(self):
self.widgets["normal"]["tabframe"] = Frame(self.root)
self.widgets["dakuten"]["tabframe"] = Frame(self.root)
self.widgets["handakuten"]["tabframe"] = Frame(self.root)
self.widgets["normal"]["frame"] = Frame(self.widgets["normal"]["tabframe"], bg="gray")
self.widgets["dakuten"]["frame"] = Frame(self.widgets["dakuten"]["tabframe"], bg="gray")
self.widgets["handakuten"]["frame"] = Frame(self.widgets["handakuten"]["tabframe"], bg="gray")
def __initWidgets(self):
self.__initFrameWidgets()
self.__initNotebookWidget()
self.__initButtonWidgets()
def loop(self):
def drawChart(widgets, chart):
idx = 0
for y in range(len(chart)):
for x in range(len(chart[y])):
if chart[y][x]:
widgets[idx].grid(row = y, column = x)
idx += 1
self.tabControl.pack(expand = 1, fill ="both")
self.widgets["normal"]["frame"].pack(fill=Y,expand=True,padx=10, pady=10)
self.widgets["dakuten"]["frame"].pack(fill=Y,expand=True,padx=10, pady=10)
self.widgets["handakuten"]["frame"].pack(fill=Y,expand=True,padx=10, pady=10)
chart = [[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1],
[1,0,1,0,1],
[1,1,1,1,1],
[1,0,0,0,1],
[1]]
drawChart(self.widgets["normal"]["chartbuttons"], chart)
chart = [[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1]]
drawChart(self.widgets["dakuten"]["chartbuttons"], chart)
chart = [[1,1,1,1,1]]
drawChart(self.widgets["handakuten"]["chartbuttons"], chart)
# main:
root = Tk()
root.title("HiraMana")
root.resizable(False, False)
mainApp = HiraMana(root, font=font.Font(family='Helvetica', size=22, weight='bold'))
mainApp.loop()
root.mainloop()
not: kodu denemek için tix kütüphane eklentisine gerek yok ve playsound ile ilgili kısımları silerseniz çalıştırabilirsiniz
sonuç:
beklenen:
