2017-07-12 16 views
3

私は3つの "メッセージウィジェット"を作成していますが、内容に応じて幅と高さが変更されているようですが、そのようなことを防ぐことは可能でしょうか?Tkinter Messageウィジェットのサイズ変更を止めるには?

from tkinter import * 

root = Tk() 
root.configure(background = 'Yellow') 
root.geometry('500x400') 

a = '{}'.format('The Elepthan is Big') 
b = '{}'.format('The Bird') 
c = '{}'.format('The Lion is big and ferocious, kills any animal') 

msg = Message(root, text = a, width=300, justify='left') 
msg.config(bg='lightgreen',relief=RIDGE, font=('times', 9), pady=-2, borderwidth=3) 
msg.pack() 


msg = Message(root, text = b, width=300, justify='left') 
msg.config(bg='lightgreen',relief=RIDGE, font=('times', 9), pady=-2, borderwidth=3) 
msg.pack() 

msg = Message(root, text = c, width=300, justify='left') 
msg.config(bg='lightgreen',relief=RIDGE, font=('times', 9), pady=-2, borderwidth=3) 
msg.pack() 




root.mainloop() 
+0

はい、その可能。メッセージウィジェットを作成するために使用しているコードのサンプルを提供し、サイズ変更を防ぐために欠落しているものを教えてください。グリッドに重さを加える必要があるかもしれません。 –

+1

問題があることを示す[mcve]を入力してください。 –

+0

@BryanOakley同じ幅のすべてのメッセージウィジェットが必要ですが、内容に応じてサイズが変更されます - espktro 8分前 – espktro

答えて

3

UPDATE:

あなたはここにいくつかのオプションを持っていますが、あなたのコメントwidgets resize according to their content, I want them all with same widthに応じて、私は最高のpack()ジオメトリマネージャを使用して、あなたのニーズに合った例を与えます。少なくとも、最も簡単なオプションは、あなたがやりたいpack(fill = BOTH)

最も簡単な方法は、フレームを使用することで行うことですパックの

。フレームは最大のテキストにリサイズされ、すべてのメッセージウィジェットでpack(fill = BOTH)を使用すると、小さなウィジェットが最大ウィジェットのサイズでもあるフレームのサイズに展開されます。

from tkinter import * 

root = Tk() 
root.configure(background = 'Yellow') 
root.geometry('500x400') 

a = '{}'.format('The Elepthan is Big') 
b = '{}'.format('The Bird') 
c = '{}'.format('The Lion is big and ferocious, kills any animal') 

frame = Frame(root) 
frame.pack() 

msg = Message(frame, text = a, width=300, justify='left') 
msg.config(bg='lightgreen',relief=RIDGE, font=('times', 9), pady=-2, borderwidth=3) 
msg.pack(fill=BOTH) 


msg = Message(frame, text = b, width=300, justify='left') 
msg.config(bg='lightgreen',relief=RIDGE, font=('times', 9), pady=-2, borderwidth=3) 
msg.pack(fill=BOTH) 

msg = Message(frame, text = c, width=300, justify='left') 
msg.config(bg='lightgreen',relief=RIDGE, font=('times', 9), pady=-2, borderwidth=3) 
msg.pack(fill=BOTH) 

root.mainloop() 
+0

親幅ではなく固定幅はどうですか?フレーム= 400メッセージ= 270 ...グリッドまたはパックのいずれかで、私は、親ウィジェット(400)の幅ではなく、同じ幅(270)のすべてのメッセージウィジェットを必要とします。 – espktro

+0

いくつかのオプションがあります。 1つはフレームのグリッドのサイズ変更を無効にして、フレームが設定された幅に留まるようにすることです。私は他の選択肢があることを知っていますが、私はそれについて考える必要があります。私は何を見つけることができます。 –

2

あなたは最長メッセージの幅を発見し、その後Messageウィジェットのpadxオプションを使用して、その長さの値内でそれらのすべてを中心としてそれを行うことができます。ここでは例です:

from tkinter import * 
import tkinter.font as tkFont 

root = Tk() 
root.configure(background='Yellow') 
root.geometry('500x400') 

a = 'The Elepthan is Big' 
b = 'The Bird' 
c = 'The Lion is big and ferocious, kills any animal' 
messages = a, b, c 

msgfont = tkFont.Font(family='times', size=9) 
maxwidth = max(msgfont.measure(text) for text in messages) # get pixel width of longest one 

for text in messages: 
    msg = Message(root, text=text, width=maxwidth, justify='left') 
    padx = (maxwidth-msgfont.measure(text)) // 2 # padding needed to center text 
    msg.config(bg='lightgreen', relief=RIDGE, font=msgfont, padx=padx, pady=-2, borderwidth=3) 
    msg.pack() 

root.mainloop() 

結果:

enter image description here

+0

フレームを使用するだけでは簡単ではなく、 'pack(fill = BOTH) 'を使ってすべてのものを独自にサイズ変更することはできますか? –

+0

@Sierra:フレーム内のすべてを入れることが許容されれば他に何が起こっているのか。私の答えに示されているメソッドはもっと複雑かもしれませんが、 'Message'ウィジェットをコントロールせずに(そして必要な値を計算する方法を)どのように制御するのかを示しています。説明のために – martineau

+1

タイ –

関連する問題