2016-08-04 41 views
1

目的: "タブ"(選択したタブに基づいて情報を変更することができます)と、同じ部分を常に表示する部分があるGUIを作成しようとしています。Python Tkinterのタブとキャンバス

import ttk 
import Tkinter 


def demo(): 
    #root = tk.Tk() 
    schedGraphics = Tkinter 
    root = schedGraphics.Tk() 


    root.title("Testing Bot") 
    universal_height = 606 
    canvas = schedGraphics.Canvas(root,width = 900, height = universal_height) 

    nb = ttk.Notebook(root) 


    # adding Frames as pages for the ttk.Notebook 
    # first page, which would get widgets gridded into it 
    page1 = ttk.Frame(nb,width = 300,height = universal_height) 
    # second page 
    page2 = ttk.Frame(nb,width = 300,height = universal_height) 


    nb.add(page1, text='One') 
    nb.add(page2, text='Two') 

    # 

    nb.grid() 

    day_label = schedGraphics.Label(page1, text="Day1:") 
    day_label.pack() 
    day_label.place(x=0, y=30) 

    day_label = schedGraphics.Label(page2, text="Day2:") 
    day_label.pack() 
    day_label.place(x=0, y=30) 


    canvas.create_rectangle(50,500,300,600,fill = "red") 
    canvas.grid() 



    root.mainloop() 

if __name__ == "__main__": 
    demo() 

問題:タブがない左側の画面の中央に配置されている現在の構成で

  1. canvas.grid()をcanvas.pack()に変更しても、実際にはウィンドウが開きませんか?

  2. キャンバスの四角形が表示されません!

ありがとうございます。お使いのノートブックをグリッド化する場合、これを行うには、引数columnを渡すと、それはこのように、左端に位置されるように、0を選択することが

答えて

0
  1. nb.grid(column=0)

  2. だから.grid().pack()の間であなたのtkinterアプリを選択しなければなりません。その2つは互換性がありません。以前に.grid()を使用していた場合、ウィンドウは開かず、TclErrorがポップアップします。

  3. 実際にあなたのキャンバスはノートブックの下に隠されています。 0からgridを使用した場合、それが上になるようにその問題を解決するには、row引数を設定し、次のように:

    canvas.grid(column=1, row=0)

決勝コード:

import Tkinter 
import ttk 


def demo(): 
    #root = tk.Tk() 
    schedGraphics = Tkinter 
    root = schedGraphics.Tk() 

    root.title("Testing Bot") 
    universal_height = 606 

    nb = ttk.Notebook(root) 

    # adding Frames as pages for the ttk.Notebook 
    # first page, which would get widgets gridded into it 
    page1 = ttk.Frame(nb, width= 300,height = universal_height) 
    # second page 
    page2 = ttk.Frame(nb,width = 300,height = universal_height) 

    nb.add(page1, text='One') 
    nb.add(page2, text='Two') 

    nb.grid(column=0) 

    day_label = schedGraphics.Label(page1, text="Day1:") 
    day_label.pack() 
    day_label.place(x=0, y=30) 

    day_label = schedGraphics.Label(page2, text="Day2:") 
    day_label.pack() 
    day_label.place(x=0, y=30) 

    canvas = schedGraphics.Canvas(root, width=900, height=universal_height) 
    canvas.create_rectangle(50, 500, 300, 600, fill="red") 
    canvas.grid(column=1, row=0) 

    root.mainloop() 

if __name__ == "__main__": 
    demo() 

私はこれを願っています助けて!

+0

ポイント#1は誤解を招く恐れがあります。 1つは、列0を使用すると言いますが、列1を使用して表示します。もう1つは、最も左の列にあるという理由だけで、ウィンドウの左端に当たることを保証しません。 –

+0

@BryanOakleyその誤字をおかけして申し訳ありません、それを指摘していただきありがとうございます。第2のポイントは、はるか左に私はノートブックとエッジの間に何もないことを意味しますが、必ずしもそれがそれに固執するとは限りません。 – TrakJohnson

+0

ありがとう@TrakJohnson!完璧な答えと私が欲しかったものを正確に行います。フォローアップの質問:私は、タブ上で矩形の描画(そして私がキャンバスにドラッグできるようにする)をしたいとします。私はすでにキャンバス上で動作するドラッグコードを持っていますが、私は "タブ"に描画する四角形を取得することはできません – smarttylerthecreator

関連する問題