2012-04-23 2 views
1

텍스트 위젯을 사용하여 roguelike를 만들려고합니다.tkinter.Text 위젯의 현재 크기 찾기

나는 폭과 높이 옵션을 사용하여 위젯의 크기를 설정할 수 있고 위젯의 픽셀 높이나 너비를 찾을 수 있다는 것을 알아 냈습니다. 그러나, 내가하고 싶은 것은 위젯 크기를 재조정 할 수 있지만 (pack (expand = "yes", fill = "both")) 크기를 변경하면 표시된 텍스트를 새로 고칠 수 있어야합니다. Winfo_width() 및 문자의 픽셀 크기를 기반으로 한 수학을 사용하지 않고 위젯이 실행 중일 때 문자 크기를 가져 오는 방법이 있습니까?

+0

프레임에 텍스트 위젯을 압축하고 프레임 크기를 가져올 수 있습니다. – mgilson

+0

그냥 픽셀 크기를줍니다. – jaccarmac

+0

죄송합니다. 귀하의 게시물을 신중하게 읽지 않았습니다. 나는 당신이 픽셀 크기를 원한다고 생각했다. 내 잘못. – mgilson

답변

0

자동으로 너비를 문자로 가져올 방법이 없지만 고정 너비 글꼴을 사용한다고 가정하면 계산하기 쉽습니다. 이 작업을 수행하는 한 가지 방법은 글꼴 개체의 font_measure 메서드를 사용하는 것입니다. font_measure을 사용하여 '0'(또는 그 문제의 다른 문자)의 너비를 구하십시오. 저는 tk 사용자가 내부적으로 0 인 것으로 생각합니다. 고정 너비 글꼴로 중요하지는 않습니다.) 그런 다음 계산에 사용하십시오.

+0

정말 고마워! 이것은 약간의 여분의 코드를 포함하지만, 파이썬의 아름다움은 단순합니다. 그리고 이것이 작동합니다 (가장 중요한 부분 :) – jaccarmac

2

나는 그 정확한 문제를 몇 시간 만에 jaccarmac에 실었다. 그리고 나의 지식으로는 문자열의 폭을 찾을 방법이 없다. 정말 유일한 방법은 winfo_ 명령을 사용하는 것입니다 : width, height, geometry. 그러나 레이블을 변경하고 텍스트를 더 추가하는 경우 모든 텍스트가 표시되도록하려는 것처럼 들릴 것입니다. 그렇다면 걱정할 필요가 없습니다. 위젯 자체가 모두이를 처리해야합니다. 레이블이 모두 표시되도록 확장되지 않으면 해당 레이블이 포함 된 위젯 중 하나가 확장되도록 설정되지 않았 음을 의미합니다 (expand = YES with .pack 또는 columnconfigure (i, weight = 1) for for .그리드).

마지막 생각. 팩 인수에서 YES이고 "yes"이 아님을 확인하십시오. 이 대문자 YES는 문자열이 아니라 Tkinter에 의해 정의 된 변수 이름입니다.

+1

tkinter 변수 이름은 문자열로 대체 될 수 있습니다. 'tkinter import *'와 반대로'import tkinter as tk'를 사용할 때 훨씬 편리합니다. –

+0

저는 본질적으로 저주 대체물로서 텍스트를 사용하여 게임을 만들고 있습니다. 나는 입장에 대해 걱정하지 않는다. – jaccarmac

0

이 오래된 질문이지만, 몇 가지 조사를 수행 한 후 실제로 수학없이 또는 Text 위젯의 cget() 방법을 사용하여 글꼴의 폭을 가지고 노는 직접 높이/폭 정보를 얻을 수있는 방법이 있다는 것을 발견했습니다

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

Text 위젯은 높이와 너비 구성을 문자로 저장하기 때문에 단순히 매개 변수를 쿼리하면 원하는 것을 얻을 수 있습니다.