Özel bir öğe oluşturmak için bir pencere parçacığını alt sınıflara ayırmak çok normaldir. Ancak, bu özel pencere öğesi birden fazla widget'dan oluşuyorsa normalde Frame
alt sınıfını kullanırsınız. Metin eklerken iç metin widget'ı başvurmak gerekir nasıl fark, bu yaklaşımla
import Tkinter as tk
class ScrolledText(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent)
self.text = tk.Text(self, *args, **kwargs)
self.vsb = tk.Scrollbar(self, orient="vertical", command=self.text.yview)
self.text.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side="right", fill="y")
self.text.pack(side="left", fill="both", expand=True)
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.scrolled_text = ScrolledText(self)
self.scrolled_text.pack(side="top", fill="both", expand=True)
with open(__file__, "r") as f:
self.scrolled_text.text.insert("1.0", f.read())
root = tk.Tk()
Example(root).pack(side="top", fill="both", expand=True)
root.mainloop()
: Örneğin, böyle bir şey yapacağını bir kaydırma çubuğu olan bir metin widget widget oluşturun. Bu widget'ın gerçek bir metin parçacığı gibi daha fazla görünmesini istiyorsanız, metin öğesi işlevlerinin bazılarına veya tümüne bir eşleme oluşturabilirsiniz. Örneğin:
import Tkinter as tk
class ScrolledText(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent)
self.text = tk.Text(self, *args, **kwargs)
self.vsb = tk.Scrollbar(self, orient="vertical", command=self.text.yview)
self.text.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side="right", fill="y")
self.text.pack(side="left", fill="both", expand=True)
# expose some text methods as methods on this object
self.insert = self.text.insert
self.delete = self.text.delete
self.mark_set = self.text.mark_set
self.get = self.text.get
self.index = self.text.index
self.search = self.text.search
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.scrolled_text = ScrolledText(self)
self.scrolled_text.pack(side="top", fill="both", expand=True)
with open(__file__, "r") as f:
self.scrolled_text.insert("1.0", f.read())
root = tk.Tk()
Example(root).pack(side="top", fill="both", expand=True)
root.mainloop()
Ne sormaya çalışıyorum olduğunu Tkinter.Text (ya da yöntem ve işlevleri var korumak için başka widget'ı) özel bir widget oluşturmak için alt sınıfı için iyi bir uygulama öyle. Bu durumda, sınıfımdaki bir kareye bir kaydırma çubuğu yerleştirerek Tkinter.Text alt sınıfını yapıyorum. Veya Çerçeveyi alt sınıflara ayırmalı ve Metin Widget'ını ve kaydırma çubuğunu doğrudan üzerine yerleştirmeli ve kendi yöntemlerimi ve işlevlerimi oluşturmalı mıyım? – user2830098
Cevabın güncellemesine göz atın –