2012-01-19 42 views
7

Nếu tôi chạy mã Python này:Tại sao phương thức "geometry()" hoạt động với độ trễ?

from Tkinter import *; w = Tk(); w.geometry("640x480"); print(w.geometry()) 

tôi sẽ nhận được "1x1 + 0 + 0" đầu ra. Nhưng nếu tôi bắt đầu phiên dịch và thực hiện điều này như hai lệnh riêng biệt, tôi sẽ nhận được kết quả hoàn toàn khác nhau:

>>> from Tkinter import *; w = Tk(); w.geometry("640x480") 
'' 
>>> w.geometry() 
'640x480+101+73' 

Có vẻ như hình học không được áp dụng ngay lập tức, cái gì khác là cần thiết:. (Có lẽ có ai biết những gì tôi cần ? làm để cập nhật hình học inplace tôi cần nó để đúng trung tâm/vị trí chính và con cửa sổ

+0

Câu hỏi hay. Tôi cho rằng có một số thời gian trễ giữa việc tạo cửa sổ và đọc kích thước của nó. Kỳ lạ thay, nếu tôi đặt một bản in "foo"; ở giữa 2 phát biểu cuối cùng nó hoạt động, nhưng nếu tôi đặt hai trong số chúng python dường như treo. – jgritty

Trả lời

6

Calling update_idletasks() trên một cửa sổ (hoặc một widget) sẽ buộc hình học của nó để cập nhật.

Dưới đây là một đoạn văn bản nhỏ từ tài liệu tham khảo Tkinter:

Hình học không chính xác cho đến khi ứng dụng đã được cập nhật nhiệm vụ nhàn rỗi của mình. Đặc biệt, tất cả các hình học ban đầu là "1x1 + 0 + 0" cho đến khi các widget và trình quản lý hình học đã thương lượng vị trí của chúng.

0

này hoàn tất, nhưng cung cấp cho câu trả lời sai:.

from Tkinter import *; w = Tk(); w.geometry("640x480"); print "foo"; print(w.geometry()) 

'' 
foo 
1x1+0+0 

Điều này có vẻ như treo:

from Tkinter import *; w = Tk(); w.geometry("640x480"); print "foo"; print "foo"; print(w.geometry()) 

Chỉ có một ngắt bàn phím dường như giúp tôi thoát.

Chắc chắn, điều này dường như để làm việc đúng cách:

from Tkinter import *; w = Tk(); w.geometry("640x480"); w.update_idletasks(); print(w.geometry()) 

'' 
640x480+5+27 
+0

Tôi nghĩ rằng nó ** không ** làm việc ... – joaquin

+0

Điểm tốt. Tôi chỉ có nghĩa là làm việc theo nghĩa là nó đã hoàn thành. – jgritty

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