2014-07-09 13 views
6

Python ve Tkinter öğelerini öğrendiğimden küçük bir test Python uygulamasına sahibim ve bir pencerede bir etiket ızgarasının nasıl eşit bir şekilde yeniden boyutlandırılacağını anlamaya çalışıyorum. Farklı renkli karelerden oluşan geniş bir ızgara yapmak istiyorum, bu yüzden kareleri yapmak için bir arka plan rengiyle etiketler kullanıyorum. Kullanıcı pencereyi genişlettikten sonra kareleri otomatik olarak yeniden boyutlandırmak istiyorum ve sonra boyutlarını küçülttüğünüzde aynı boyutta olacak şekilde yeniden boyutlandırıp ölçeklendirmelerini istiyorum. BöylePython Tkinter - pencereleri eşit bir pencerede yeniden boyutlandırma

şey:

Default "square" size. Opens up at this size by default.

böyle eşit boyutlandırır ve ölçekler:

Size when the window is expanded in size.

Başka bir deyişle: Her etiket gerektiği tüm ölçek eşit pencere terazi gibidir. "Pencere" ve "widget" ile doğru terimleri kullanıyorum bile emin değilim. Ama ben bir GUI'ye etiketler yerleştiriyorum. İşe bu almak için denemek için kullanıyorum

Testi kodu:

import Tkinter 

class simpleapp_tk(Tkinter.Tk): 
    def __init__(self,parent): 
     Tkinter.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.grid() 

     label = Tkinter.Label(self,anchor="center",bg="green") 
     label.grid(column=0,row=0,sticky='EW') 

     label2 = Tkinter.Label(self,anchor="center",bg="black") 
     label2.grid(column=1,row=0,sticky='EW') 

     label3 = Tkinter.Label(self,anchor="center",bg="red") 
     label3.grid(column=2,row=0,sticky='EW') 

     label4 = Tkinter.Label(self,anchor="center",bg="purple") 
     label4.grid(column=0,row=1,sticky='EW') 

     label5 = Tkinter.Label(self,anchor="center",bg="blue") 
     label5.grid(column=1,row=1,sticky='EW') 

     label6 = Tkinter.Label(self,anchor="center",bg="yellow") 
     label6.grid(column=2,row=1,sticky='EW') 


     self.grid_columnconfigure(0,weight=0) 

if __name__ == "__main__": 
    app = simpleapp_tk(None) 
    app.title("Test App") 
    app.mainloop() 

cevap

8

tüm satırlar ve sütunlar aynı sıfırdan ağırlığını ver. Örneğin

:

self.grid_columnconfigure(0,weight=1) 
self.grid_columnconfigure(1,weight=1) 
self.grid_columnconfigure(2,weight=1) 
self.grid_rowconfigure(0,weight=1) 
self.grid_rowconfigure(1,weight=1) 
+0

Awesome! Teşekkürler! Ben baktım ama TÜM satırlar ve sütunlar için bir "varsayılan" ayar bulamadık. Bu var mı, yoksa tüm sütunlar ve satırlar için ayrı ayrı "self.grid_columnconfigure (0, weight = 1)" ve "self.grid_columnconfigure (1, weight = 1)" eklemesi gerekip gerekmediğini biliyor musunuz? – user1340081

+1

Her satır ve tekil –

+0

Müthiş için ayrı ayrı yapmanız gerekir. Tekrar teşekkürler! – user1340081

3

answerBryan Oakley tarafından sağlanan tamamlanması, piton 3 içinde çözmek için kodu aşağıdaki şekildedir.

Pencerenin yeniden boyutlandırıldığı oranı yönetmek için bir seçenek, grid_columnconfigure(1,weight=1) ve işlevleri için ağırlık parametrelerini farklı değerlere ayarlamaya dikkat edin.

import tkinter 

class simpleapp_tk(tkinter.Tk): 
    def __init__(self,parent): 
     tkinter.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.grid() 

     label = tkinter.Label(self,anchor="center",bg="green") 
     label.grid(column=0,row=0,sticky='NSEW') 

     label2 = tkinter.Label(self,anchor="center",bg="black") 
     label2.grid(column=1,row=0,sticky='NSEW') 

     label3 = tkinter.Label(self,anchor="center",bg="red") 
     label3.grid(column=2,row=0,sticky='NSEW') 

     label4 = tkinter.Label(self,anchor="center",bg="purple") 
     label4.grid(column=0,row=1,sticky='NSEW') 

     label5 = tkinter.Label(self,anchor="center",bg="blue") 
     label5.grid(column=1,row=1,sticky='NSEW') 

     label6 = tkinter.Label(self,anchor="center",bg="yellow") 
     label6.grid(column=2,row=1,sticky='NSEW') 


     self.grid_columnconfigure(0,weight=1) 
     self.grid_columnconfigure(1,weight=1) 
     self.grid_columnconfigure(2,weight=1) 
     self.grid_rowconfigure(0,weight=1) 
     self.grid_rowconfigure(1,weight=1) 


if __name__ == "__main__": 
    app = simpleapp_tk(None) 
    app.title("Test App") 
    app.mainloop() 
+0

Pencerenin yeniden boyutlandırıldığı oranı yönetmek için bir seçenek, ağırlık parametrelerini farklı değerlere ayarlamaktır. – aturegano