Merhaba,
Uygulamada iki adet frame var. Soldakinde bulunan düğmeye basınca sağdaki frame i değiştirmek istiyorum. Nasıl yapabilirim?
import tkinter as tk
from tkinter import ttk
class PyTkStringer(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.callAllFrames()
def callAllFrames(self):
self. leftFrame()
self.rightFrame11()
def leftFrame(self):
self.leftFrame = tk.Frame(self)
self.leftFrame.pack(side="left")
self.btn1 = ttk.Button(self.leftFrame, text="Call Other Frame", command=self.callFrame)
self.btn1.grid(row=0, column=0)
def rightFrame11(self):
self.rightFrame1 = tk.Frame(self)
self.rightFrame1.pack(side="right")
self.lbl1 = ttk.Label(self.rightFrame1, text="I am the right Frame 11111")
self.lbl1.grid(row=0, column=0)
def rightFrame22(self):
self.rightFrame2 = tk.Frame(self)
self.rightFrame2.pack(side="right")
self.lbl1 = ttk.Label(self.rightFrame2, text="I am the right Frame 22222")
self.lbl1.grid(row=0, column=0)
def callFrame(self):
pass
def main():
app = PyTkStringer()
app.mainloop()
if __name__ == "__main__":
main()
Merhaba.
Sağ frame’deki neyi değiştirmek istiyorsunuz? Aslında callFrame
metodunda sınıfın örneğini temsil eden self
değişkeni tanımlı. Bu değişkeni kullanarak tüm pencere araçlarına ulaşıp bunları değiştirebilirsiniz. Ayrıca Tkinter’da bir tuşa tıklandığında, bir event
argümanı da çağrılan metoda geçirilir; bazı durumlarda bu nesne de kullanışlı olabilir.
İyi çalışmalar.
Örnek olarak, sağ frame de uygulama ilk çalıştığında rightFrame11 çağrılıyor. Sol frame deki düğme ile rightFrame22 frame’ini çağrıp sağ frame’in içeriğini değiştirmek istiyorum.
Sanırım sağ frame’deki içerikten kastınız frame’in içindeki pencere araçları. Eğer durum buysa doğrudan pencere araçlarını çağırabilirsiniz. Örneğin; gördüğüm kadarı ile lbl1
pencere aracı bu frame’in içinde. Bu pencere aracını self.lbl1
diye çağırarak istediğiniz değişikliği yapabilirsiniz.
Tabii frame’den de pencere araçlarına ulaşmak mümkün ama şu durumda bunun gereksiz olduğunu düşünüyorum.
İyi çalışmalar.
Şöyle bir çözüm buldum:
Öncelikle uygulama ilk çalıştığında bütün frame’lerin çağrılmış olması gerek. Sonradan çağrıcılacak frame’in pack’lememek gerekiyor
import tkinter as tk
from tkinter import ttk
class PyTkStringer(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.callAllFrames()
def callAllFrames(self):
self. leftFrame()
self.rightFrame11()
self.rightFrame22()
def leftFrame(self):
self.leftFrame = tk.Frame(self)
self.leftFrame.pack(side="left")
self.btn1 = ttk.Button(self.leftFrame, text="Call Other Frame",
command=lambda:self.callFrame(self.rightFrame1, self.rightFrame2))
self.btn1.grid(row=0, column=0)
def rightFrame11(self):
self.rightFrame1 = tk.Frame(self)
self.rightFrame1.pack(side="right")
self.lbl1 = ttk.Label(self.rightFrame1, text="I am the right Frame 11111")
self.lbl1.grid(row=0, column=0)
def rightFrame22(self):
self.rightFrame2 = tk.Frame(self)
self.lbl1 = ttk.Label(self.rightFrame2, text="I am the right Frame 22222")
self.lbl1.grid(row=0, column=0)
def callFrame(self, forgetFrame, raiseFrame):
forgetFrame.pack_forget()
raiseFrame.pack(side="right")
def main():
app = PyTkStringer()
app.mainloop()
if __name__ == "__main__":
main().