2012-05-05 17 views
6

Tôi đang cố gắng viết một ui đơn giản với Tkinter trong python và tôi không thể tải các tiện ích trong lưới để thay đổi kích thước. Bất cứ khi nào tôi thay đổi kích thước cửa sổ chính các mục nhập và các tiện ích nút không điều chỉnh chút nào.Lưới Tk sẽ không thay đổi kích thước đúng cách

Đây là mã của tôi:

class Application(Frame): 
    def __init__(self, master=None): 
     Frame.__init__(self, master, padding=(3,3,12,12)) 
     self.grid(sticky=N+W+E+S) 
     self.createWidgets() 

    def createWidgets(self): 
     self.dataFileName = StringVar() 
     self.fileEntry = Entry(self, textvariable=self.dataFileName) 
     self.fileEntry.grid(row=0, column=0, columnspan=3, sticky=N+S+E+W) 
     self.loadFileButton = Button(self, text="Load Data", command=self.loadDataClicked) 
     self.loadFileButton.grid(row=0, column=3, sticky=N+S+E+W) 

     self.columnconfigure(0, weight=1) 
     self.columnconfigure(1, weight=1) 
     self.columnconfigure(2, weight=1) 

app = Application() 
app.master.title("Sample Application") 
app.mainloop() 

Trả lời

14

Thêm cửa sổ gốc và cột định cấu hình để tiện ích Khung của bạn mở rộng quá. Đó là vấn đề, bạn đã có một cửa sổ gốc ẩn nếu bạn không chỉ định một và khung chính nó là những gì không mở rộng đúng cách.

root = Tk() 
root.columnconfigure(0, weight=1) 
app = Application(root) 
+2

đã thêm hàng cấu hình để cho phép mở rộng theo chiều dọc –

0

tôi sử dụng gói cho việc này. Trong hầu hết các trường hợp, nó là đủ. Nhưng không trộn lẫn cả hai!

class Application(Frame): 
    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.pack(fill = X, expand =True) 
     self.createWidgets() 

    def createWidgets(self): 
     self.dataFileName = StringVar() 
     self.fileEntry = Entry(self, textvariable=self.dataFileName) 
     self.fileEntry.pack(fill = X, expand = True) 
     self.loadFileButton = Button(self, text="Load Data",) 
     self.loadFileButton.pack(fill=X, expand = True) 
+0

Tôi sẽ xem xét sử dụng gói thay vì lưới nhưng từ những gì tôi đã đọc lưới cũng hoạt động để thay đổi kích thước tiện ích con. – mjn12

+0

Tôi không sử dụng lưới điện một thời gian dài vì vậy tôi không biết. chúc may mắn! – User

0

Ví dụ làm việc. Lưu ý rằng bạn phải đặt cấu hình rõ ràng cho mỗi cột và hàng được sử dụng, nhưng cột cho nút bên dưới là số lớn hơn số cột được hiển thị.

## row and column expand 
top=tk.Tk() 
top.rowconfigure(0, weight=1) 
for col in range(5): 
    top.columnconfigure(col, weight=1) 
    tk.Label(top, text=str(col)).grid(row=0, column=col, sticky="nsew") 

## only expands the columns from columnconfigure from above 
top.rowconfigure(1, weight=1) 
tk.Button(top, text="button").grid(row=1, column=0, columnspan=10, sticky="nsew") 
top.mainloop()