2010-10-01 24 views
6

Với mã này, cửa sổ là 500 500, đó là những gì tôi sẽ cho:Tại sao khung Tkinter lại thay đổi kích cỡ khi hộp văn bản được thêm vào nó?

from tkinter import * 
root = Tk() 

frame = Frame(root, width=500, height=500) 

frame.pack() 
root.mainloop() 

Khi tôi thêm một hộp văn bản vào khung, tuy nhiên, nó co lại để chỉ kích thước của văn bản hộp:

from tkinter import * 
root = Tk() 

frame = Frame(root, width=500, height=500) 

text = Text(frame, width=10, height=2) # THESE TWO 
text.pack()       # LINES HERE 

frame.pack() 
root.mainloop() 

Tại sao điều này xảy ra và làm cách nào để ngăn điều đó xảy ra?

Trả lời

6

Khung theo mặc định đã bật "truyền gói". Điều đó có nghĩa là người đóng gói "tính tổng thể lớn đến mức nào để đáp ứng chính xác nhu cầu của nô lệ của nó, và nó đặt chiều rộng và chiều cao yêu cầu của chủ thành các kích thước" (trích dẫn từ trang chính thức tcl/tk [1]).

Đối với phần lớn các trường hợp, đây là hành vi đúng chính xác. Đối với những lần bạn không muốn điều này, bạn có thể gọi pack_propagate trên máy chủ và đặt giá trị thành sai. Tôi nghĩ rằng trong gần 20 năm của chương trình tk tôi chỉ cần làm điều này một nửa tá hoặc lâu hơn, nếu điều đó.

Một lựa chọn khác mà bạn có là sử dụng wm_geometry để đặt kích thước của toplevel sau khi bạn đã tạo tất cả các tiện ích. Điều này có hiệu quả giống như khi người dùng đã thay đổi kích thước cửa sổ theo cách thủ công. Điều này chỉ làm việc cho các cửa sổ toplevel, bạn không thể sử dụng wm_geometry trên một khung.

+0

Tuyệt vời, cảm ơn rất nhiều! – Kiwi

Các vấn đề liên quan