2016-04-13 6 views
0

私は自分のRaspberry Piのフルスクリーンアプリを作ろうとしています。私はある程度コードを手に入れました。私が今やりたいのは、一番上の赤い部分を3つの部分に分けて、頻繁に変わるデータを含むラベルを貼ることができます。Tkinterを使ってレイアウトが変更されました

#!/usr/bin/python 

from tkinter import * 
from tkinter import ttk 

root = Tk() 
root.title("Learning Number Bonds!") 

test = StringVar(value="XX + XX = XXX") 
score = StringVar(value="0") 
question = StringVar(value="7/10") 
time = StringVar(value="8s") 


w, h = root.winfo_screenwidth(), root.winfo_screenheight() 
root.geometry("%dx%d+0+0" % (w, h)) 

topFrame = Frame(root, bg="red", width=w, height=h/4) 
##Label(topFrame, text="test").grid(row=1, column=1) 
topFrame.pack() 

bottomFrame = Frame(root, bg="blue", width=w, height= h-(h/4)) 
bottomFrame.pack() 

equation = Label(bottomFrame, textvariable=test, font=("Arial", 70)) 
equation.pack(fill=X) 

root.mainloop() 

This is what I have, and the bottom how I want

しかし、私はコメント行を追加するときには、次のようになります。

[これは、すべての休憩 - 削除]

私が一番上に3つの等しいサイズのボックスを取得できますかそれらのラベルで!

EDIT:

私はこのことについて考えるにはあまりにも疲れて愚かだったに違いないとのボックスが同じサイズになるように、「HAD」実際に巻き込まれました。すべての助けを

#!/usr/bin/python 

from tkinter import * 
from tkinter import ttk 

root = Tk() 
root.title("Learning Number Bonds!") 

test = StringVar(value="XX + XX = XXX") 
score = StringVar(value=999) 
question = StringVar(value="10/10") 
time = StringVar(value="10") 


w, h = root.winfo_screenwidth(), root.winfo_screenheight() 
root.geometry("%dx%d+0+0" % (w, h)) 

topFrame = Frame(root, bg="red", width=w, height=h/4) 

##Score 
scoreTextLabel = Label(topFrame, text="Score: ", font=("Arial", 30)) 
scoreTextLabel.pack(side=LEFT) 

Label2 = Label(topFrame, textvariable=score, font=("Arial", 30)) 
Label2.pack(side=LEFT, padx=(0,50)) 

##Question 
qTextLabel = Label(topFrame, text="Question: ", font=("Arial", 30)) 
qTextLabel.pack(side=LEFT) 

TextLabel2 = Label(topFrame, textvariable=question, font=("Arial", 30)) 
TextLabel2.pack(side=LEFT, padx=(0,50)) 

##Time 
tTextLabel = Label(topFrame, text="Time: ", font=("Arial", 30)) 
tTextLabel.pack(side=LEFT) 

TextLabel3 = Label(topFrame, textvariable=time, font=("Arial", 30)) 
TextLabel3.pack(side=LEFT, padx=(0,50)) 


topFrame.pack(pady=(0,120)) 

bottomFrame = Frame(root, bg="blue", width=w, height= h-(h/4)) 
bottomFrame.pack() 

equation = Label(bottomFrame, textvariable=test, font=("Arial", 70)) 
equation.pack(fill=X) 

root.mainloop() 

Which looks like this

ありがとう:上記の元からのコードの変更の数分後、私は終わりました!

+0

フレームの内側に関係なく、上部フレームを元のサイズに維持しますか?デフォルトでは、フレームはコンテンツに収まるように縮小または拡大されますが、これは通常、GUIの最良の動作です。 –

+0

はい、今は幅ですが、そのように残りますが、他に3つのラベルがあり、すべて同じ幅になります。 – user3406647

+0

高さはどうですか?固定された高さが必要なのか、それともラベルを入れるだけの高さですか? –

答えて

0

これは上の行を表示するように設定する方法を示しており、スティッキーを使用してフレームをストレッチしてスペース全体を占めるようにし、ラベルの幅も設定します。また、タイプを大きくする場合は、ラベルのフォントサイズを大きくすることもできます。

root = Tk() 
root.title("Learning Number Bonds!") 

test = StringVar(value="XX + XX = XXX") 
score = StringVar(value="0") 
question = StringVar(value="7/10") 
time = StringVar(value="8s") 


w, h = root.winfo_screenwidth(), root.winfo_screenheight() 
root.geometry("%dx%d+0+0" % (w, h)) 

topFrame = Frame(root, bg="red", width=w, height=h/4) 

## put an empty row on top 
topFrame.rowconfigure(0, weight=1, minsize=100) 
Label(topFrame, text="test", bg="lightblue", width=50).grid(row=1,  column=1) 
topFrame.grid(sticky="nsew") 

bottomFrame = Frame(root, bg="blue", width=w, height= h-(h/4)) 
bottomFrame.grid(row=1) 

equation = Label(bottomFrame, textvariable=test, font=("Arial", 70)) 
equation.pack(fill=X) 

root.mainloop() 
+0

なぜ、第2部分(XX + ...)の幅が小さくなったのか分かりません。 http://puu.sh/ohfK3/b5abd131f3.png – user3406647

+0

2番目のフレームをpack()からgrid()に変更したので、列内のすべてが同じ幅になりました。 –

+0

ご協力いただきありがとうございますが、私は当時はあまりにも疲れていたと思っています。私は私のポストを更新します。 – user3406647

関連する問題