2017-07-10 5 views
-1

これはビルドしているプログラム全体をわずかに露出していますが、フロントエンドだけです。あなたがアプリを自分で作成したい場合は、先に進んでください。 :PTkinter:グリッドを含むフレームを含むグリッド

タイトルが言うように、私はグリッドを含むフレームを含むグリッドを作ろうとしていますが、いくつかの同様の質問を見て、答えを完全に得られません。私はguisとtkinterには新しく、ソリューションはしばしば特定のプログラムに適しています。だから、私の似たような問題があります。

私がしようとしているのは、ioFrame以外の各フレームが2x2グリッドであるGUI Frame structureのような全体的なフレーム構造で何かを構築することです。 ioFrameには、入力行と出力行の2つの要素があります。要するに、これは論理入力を計算する計算機であり、唯一の "数"は真と偽である。

は、ここに私のコードの気圧です:

from tkinter import *; 


class calculator: 

    #def update(self, 

    def __init__(self, window): 
     """ 
     Constructor method. 
     """ 

     self.toCompute = []; self.In = StringVar(); self.Out = StringVar(); 

     # Window title 
     window.title("Logic Calculator"); 

     # The set of 5 frames. 
     ioFrame = Frame(window, relief=GROOVE, borderwidth=3); ioFrame.grid(row=0); ioFrame.pack(); 
     nwFrame = Frame(window); nwFrame.grid(row=1,column=0); nwFrame.pack(); 
     neFrame = Frame(window); neFrame.grid(row=1,column=1); neFrame.pack(); 
     swFrame = Frame(window); swFrame.grid(row=2,column=0); swFrame.pack(); 
     seFrame = Frame(window); seFrame.grid(row=2,column=1); seFrame.pack(); 

     # Top 2 rows: the IO portion 
     Label(ioFrame, textvariable=self.In, relief=SUNKEN).grid(row=0, sticky=W); 
     Label(ioFrame, textvariable=self.Out).grid(row=1, sticky=E); 

     # Top left 2x2 Frame: [ (|) ][ T | F ] 
     brlButton = Button(nwFrame, text='(', height=2, width=10).grid(row=0,column=0); 
     brrButton = Button(nwFrame, text=')', height=2, width=10).grid(row=0,column=1); 
     truButton = Button(nwFrame, text='T', height=2, width=10).grid(row=1,column=0); 
     falButton = Button(nwFrame, text='F', height=2, width=10).grid(row=1,column=1); 

     # Top right 2x2 Frame: [ AND | OOR ][ NND | NOR ] 
     andButton = Button(neFrame, text='and', height=2, width=10).grid(row=0,column=0); 
     oorButton = Button(neFrame, text='oor', height=2, width=10).grid(row=0,column=1); 
     nndButton = Button(neFrame, text='nnd', height=2, width=10).grid(row=1,column=0); 
     norButton = Button(neFrame, text='nor', height=2, width=10).grid(row=1,column=1); 

     # Bottom left 2x2 Frame: [ SSO | IIF ][ NSO | NIF ] 
     andButton = Button(swFrame, text='sso', height=2, width=10).grid(row=0,column=0); 
     oorButton = Button(swFrame, text='iif', height=2, width=10).grid(row=0,column=1); 
     nndButton = Button(swFrame, text='nso', height=2, width=10).grid(row=1,column=0); 
     norButton = Button(swFrame, text='nif', height=2, width=10).grid(row=1,column=1); 

     # Bottom right 2x2 Frame:[ EEQ | NEG ][ NEQ | === ] 
     eeqButton = Button(seFrame, text='eeq', height=2, width=10).grid(row=0,column=0); 
     negButton = Button(seFrame, text='neg', height=2, width=10).grid(row=0,column=1); 
     neqButton = Button(seFrame, text='neq', height=2, width=10).grid(row=1,column=0); 
     comButton = Button(seFrame, text='=', height=2, width=10).grid(row=1,column=1); 



if __name__ == "__main__": # Only runs program if this specfic file is opened. 

    window = Tk(); # The window 
    calculator(window); 
    window.mainloop(); 

私はまだ(私はすでに別のファイルに記述されてきた)これらのコマンドを追加する必要がありますが、私はGUIがために別々に行わ取得しようとしていました今。

私の問題は、私のコードが代わりにこの結果を出力しているということです:Current GUI。これは私がやっていたことから明らかに離れています。そして、これに新しいことは、私はおそらく問題のリストを持っています。

ご協力いただければ幸いです。

+0

どのバージョンを使用していますか?私はpython3を使用していて、提供されたコードは実行されていません。 – Nelson

+0

@ネルソンどのようにわかりますか?万が一、エラーの内容や場所を知っていますか? –

+0

@ネルソンバージョン3.3.2。 –

答えて

0

ここでは、すべてのセミコロンのために別の言語からPythonに来たと仮定します。 Pythonでは、あなたはセミコロンが不要です本当にの場合、これらの変数をすべて1行に保存したいが、スクリプト内の各行はセミコロンで終わってはいけません。

第2に、変数に入れたボタンの値をプリントアウトすると、tkinter.Buttonオブジェクトの代わりにNoneということがわかります。これは、行末に.grid(...)コールがあるためです(gridNoneを返します)。通常、後でアプリケーションで使用する場合は、ウィジェットを変数に入れます。そうでなければ、私はあなたがラベルの前でsome_variable_name =なしでそれらを呼んだだけで何をしましたか。これらのボタン変数を使って何かをしようとすると、それはすべてNoneなので、動作しません。コメントで述べたように

は、私はあなたがウィンドウのフレームを配置する.grid(...).pack(...)を使用しているため、実行するように提供されたコードを取得することができませんでした。あなたは1つだけ必要です。それが実際に私にエラーを引き起こしたものでした。ウィンドウやフレームはコンテナと考えることができます。その容器に何かを入れるのにgridを使うなら、packを使って容器に何かを入れることはできません。ウィジェットを配置するさまざまな方法が互いに衝突します。私はあなたが得たアウトプットは、gridを使ってフレームを配置してから、packを使ってそれらを再配置するので、それらが垂直に整列しているからだと信じています。また、ボタンの変数とタイプミス

########## Frames ########## 

# this is what the frames should look like in your code 
frame = Frame(window, ...) 
frame.grid(row=, column=) 



########## Buttons ########## 

# if you want to keep the buttons in variables 
btn = Button(parent, text='', width=, height=) 
btn.grid(row=, column=) 

# or 

# if the buttons don't have to be in variables, like your Labels 
Button(parent, text='', width=, height=).grid(row=, column=) 

あり:だから考慮このすべてを取る


が、これは私が持っているものです。(あなたは、変数名を維持している場合)Bottom left 2x2 Frameセクションでは、ボタンの変数名は、セクションのタイトルを一致するように変更する必要があります。

ssoButton = ... 
iifButton = ... 
nsoButton = ... 
nifButton = ... 

ボタン変数はそうdoesnの名前を再利用し、ボタンのオブジェクトへの参照のみです後でコード内でボタンを使いたい場合を除き、問題はありません。その場合、前に言ったように、それは問題を引き起こすでしょう。

あなたはそれがどのように見えるかを見ることができるように私は、コードの一部を更新:

Fixed code

編集:私はほとんどioFrame忘れてしまいました。それは上部に提供されたスペースを埋めるために拡大することが許されるべきですが、そうではありません。この問題を解決するには:(:テキストを変更するself.In.set('text here')次のように行われる)

​​

を私はちょうどそれがスペースを埋め、およびテストのためのいくつかのダミーテキストにStringVarsを設定することを確認するには、緑色の背景を設定します。すべての変更が行われた後、これが私の出力です:あなたは、Pythonの

enter image description here

+0

ありがとう!セミコロンに関しては、私はそれらを必要としません。他の言語のコードと一貫性を持たせたかっただけです。私が学んだのは実際にはPythonでした。 –

+0

@OsamaKawishようこそ。それは実際にはかなり面白いです。ちょうどあなたが知っていることを確認したい:) – Nelson

関連する問題