Merhaba,
Normalde, tk.Tk
sınıfını kullanarak yeni bir sınıfın tanımlandığını çok görmüyorum. Ancak bunun yerine tk.Button
, tk.Text
vs. vs. widgetlerin özelleştirildiği sınıfların sıklıkla oluşturulduğunu söyleyebilirim.
Örneğin, aşağıda özelleştirilmiş bir tk.Entry
sınıfı görüyorsunuz.
import tkinter as tk
class Entry(tk.Entry):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.pack()
self.bind(
sequence="<KeyRelease>",
func=self.delete_nonnumeric_chars
)
def delete_nonnumeric_chars(self, event, typ=float):
try:
if event.widget.get() != "-":
if typ == float:
float(event.widget.get())
elif typ == int:
int(event.widget.get())
except ValueError:
index = event.widget.index("insert")
event.widget.delete(index - 1, "end")
root = tk.Tk()
entry = Entry(master=root)
root.mainloop()
Başka bir örnek:
import tkinter as tk
class Button(tk.Button):
def __init__(self, color, *args, **kwargs):
super().__init__(*args, **kwargs)
self.pack()
self.configure(
activebackground=self["bg"],
activeforeground=color,
borderwidth=0,
highlightthickness=0,
font="Default 20",
fg=color
)
root = tk.Tk()
button = Button(master=root, text="Button", color="green")
root.mainloop()
Başka bir örnek:
import tkinter as tk
class EntryFrame(tk.Frame):
def __init__(self, texts, title, *args, **kwargs):
super().__init__(*args, **kwargs)
self.pack()
self.label = tk.Label(master=self, text=title, fg="red")
self.label.pack()
self.frame = tk.Frame(master=self)
self.frame.pack()
self.widgets = self.create_widgets(texts=texts)
def create_widgets(self, texts):
widgets = {}
for index, text in enumerate(texts):
label = tk.Label(master=self.frame, text=text, fg="blue")
label.grid(row=index, column=0, sticky="w")
entry = tk.Entry(master=self.frame, width=5)
entry.grid(row=index, column=1, sticky="w")
widgets[text] = entry
return widgets
root = tk.Tk()
entries = EntryFrame(master=root, texts=["Name", "Surname"], title="Info")
root.mainloop()
Olabilir, self
ile yazılmayan değişkenin sınıfın başka bir yerinde kullanılması gerekmiyordur, bu yüzden self
olmadan yazmak istemiştir kodu yazan…