Yazının Büyüklüğe Göre Otomatik Konumlandırılması

Merhabalar,

Ekranımız olduğunu varsayalım.Ayrıca bir tane klasör var.Kullanıcı,klasördeki bir dosyayı seçiyor ve Ekrandaki Label widgeti klasördeki dosyanın ismine göre değişiyor.(yani a yazısı b dosyası seçilince b’ye isim olarak dönüşüyor)

Buraya kadar bir sıkıntım yok,fakat dosya isminin büyüklüğü farklı olabilir.Ve ben her zaman Label Text’ini ekranın ortasına otomatik olarak konumlandırmak istiyorum.Nasıl yapabilirim?

tkinter widget larının .pack() metodunun expand parametresi ile istediğiniz widget’ı ortalayabilirsiniz. Örnek kullanım:

label = tk.Label(text="centered label")
label.pack(expand=True)

Bu place ile yapılabilir mi?

Biraz gereksiz bir uğraş olur. Muhtemelen bir tkinter widgetını miras alan bir class yapıp, update() metodunda label’ın pencerenizin tam ortasına koyulması için hesaplamalar yaptıktan sonra place() kullanabilirsiniz ama pack(expand=True) varken ne gerek var.

Muhtemelen daha güzel bir şekilde yazılabilirdi ama sonuçta bu durum için en uygun yol pack(expand=True) yu kullanmak.

class WindowWithCenteredLabel(tk.Tk):
	def __init__(self, *args, **kwargs):
		super().__init__(*args, **kwargs)
		self.centered = tk.Label(
			master=self, text="centered text"
		)
		self.bind("<Configure>", lambda *a: self.update())

	def update(self, *args, **kwargs):
		super().update(*args, **kwargs)
		self.center_label()

	def center_label(self):
		coor_x = (self.winfo_width() - self.centered.winfo_width()) // 2
		coor_y = (self.winfo_height() - self.centered.winfo_height()) // 2

		self.centered.place_forget()
		self.centered.place(
			x=coor_x, y=coor_y,
		)

	def mainloop(self, *args, **kwargs):
		try:
			while True:
				self.update()
				self.update_idletasks()
		except:
			return

Bu soruyu neredeyse hiç pack kullanmadığım için sormuştum.Çünkü y konumunu kendim belirlemek istiyorum.Pack ile y yi nasıl belirtiriz?
Gerçekten çok yardımcı oldunuz :hugs: