2012-04-23 43 views
1

我正嘗試使用Text小工具創建roguelike。查找tkinter.Text小工具的當前大小

我已經想出了一些東西,即我可以使用寬度和高度選項來設置窗口小部件的大小,並且我可以找到所述窗口小部件的像素高度或寬度。不過,我想要做的是讓窗口小部件可調整大小(pack(expand =「yes」,fill =「both」)),但能夠刷新調整大小顯示的文本。有沒有辦法獲得小部件運行時的字符維度,而不是通過winfo_width()和基於字符的像素尺寸的數學運算?

+0

您可以將文本小部件打包在一個幀中,並獲取幀的大小... – mgilson 2012-04-23 21:39:57

+0

這只是給你的像素大小。 – jaccarmac 2012-04-23 21:47:59

+0

對不起,我沒有仔細閱讀你的文章。我以爲你想要的像素大小。我的錯。 – mgilson 2012-04-23 21:50:56

回答

0

假設您使用固定寬度的字體,沒有辦法自動獲取字符寬度,但計算起來很容易。一種方法是使用字體對象的font_measure方法。使用font_measure來獲得'0'(或任何其他字符的寬度;我認爲tk用戶內部爲零,而不是固定寬度的字體),然後在計算中使用它。

+0

非常感謝!雖然這將涉及一些額外的代碼,但Python的優點在於其簡單性,並且這將起作用(最重要的部分:) – jaccarmac 2012-04-24 01:29:14

2

我碰到幾次相同的問題jaccarmac,據我所知,沒有辦法找到一串字符的寬度。真正唯一的方法是使用winfo_命令:寬度,高度,幾何。但是,如果您更改標籤並添加更多文本,則只需確保顯示所有文本即可。如果是這樣的話,你不必擔心。這些都應該由小部件自己來處理。如果您沒有看到它們展開以顯示所有標籤,那通常意味着其中一個包含該標籤的小部件未設置爲展開(對於.pack或expandconfigure(i,weight = 1)使用expand = YES 。格)。

最後的想法;在包參數確保它是YES,而不是"yes"。大寫YES不是字符串,而是由Tkinter定義的變量名稱。

+1

tkinter變量名稱可以被字符串替換。當你使用'import tkinter as tk'而不是'from tkinter import *'時,它會更加方便。 – 2012-04-23 23:08:58

+0

我在這裏使用Text寫一個遊戲,基本上是作爲一個curses替換。我並不擔心參賽作品。 – jaccarmac 2012-04-23 23:09:31

0

這是一個老問題,但做了一些研究之後,我發現,實際上還有一種辦法直接獲取高度/寬度信息沒有數學或使用Text部件的cget()法字體寬度玩:

text_widget = tk.Text() 
width_in_char = text_widget.cget('width') 
height_in_char = text_wdiget.cget('height') 

由於Text小部件以字符形式存儲其高度和寬度配置,因此只需查詢這些參數即可爲您提供所需的參數。