2008-12-03 18 views

Trả lời

2

Nhận ra rằng hầu hết các phông chữ đều tỷ lệ thuận, có nghĩa là mỗi ký tự có thể có chiều rộng khác nhau. WWW và lll đều có 3 ký tự, nhưng chúng sẽ yêu cầu kích thước khác nhau của hộp văn bản. Một số phông chữ, chẳng hạn như Courier, được thiết kế để có chiều rộng cố định và sẽ không có vấn đề này. Rất tiếc, bạn không thể kiểm soát phông chữ nào được chọn trong hộp văn bản.

Nếu bạn vẫn muốn thử điều này, điều quan trọng là lấy chiều rộng của một ký tự bằng pixel, nhân với số ký tự, sau đó thêm một số đệm cho đường viền xung quanh các ký tự. Bạn có thể tìm thấy điều này là một điểm khởi đầu tốt:

http://docs.wxwidgets.org/stable/wx_wxdc.html#wxdcgetpartialtextextents

hoặc, như litb gợi ý:

http://docs.wxwidgets.org/2.4/wx_wxwindow.html#wxwindowgettextextent

3

Có vẻ như không phải là một cách. Tuy nhiên, bạn có thể sử dụng wxWindow::GetTextExtent. Đây là C++, nhưng có thể dễ dàng thích nghi với wxPython:

int x, y; 
textCtrl->GetTextExtent(wxT("T"), &x, &y); 
textCtrl->SetMinSize(wxSize(x * N + 10, -1)); 
textCtrl->SetMaxSize(wxSize(x * N + 10, -1)); 

/* re-layout the children*/ 
this->Layout(); 

/* alternative to Layout, will resize the parent to fit around the new 
* size of the text control. */ 
this->GetSizer()->SetSizeHints(this); 
this->Fit(); 

đây là, bạn lấy kích thước của một nhân vật rộng hợp lý (phông chữ có thể có nhân vật biến rộng) và nhân nó đúng cách, bổ sung một số giá trị nhỏ để tài khoản cho đệm gốc (nói, 10px).

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