2016-08-04 72 views
1

目的: 我想創建一個具有「選項卡」(顯示的信息可以根據選定的選項卡改變的)屏幕的一部分的圖形用戶界面,和另一部分不斷顯示相同的東西。蟒蛇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. 在當前配置的翼片位於屏幕的未在左側的中部。

  2. 如果我將canvas.grid()更改爲canvas.pack()它實際上並不打開任何窗口?

  3. 畫布上的矩形沒有出現!

謝謝。

回答

0
  1. 要做到這一點,網格您的筆記本電腦的時候,傳遞參數column,選擇0,所以,這將是位於最左邊,就像這樣:

    nb.grid(column=0)

  2. 這是因爲您必須爲您的tkinter應用程序選擇.grid().pack()之間:兩者不兼容。由於您以前使用過.grid(),因此該窗口將不會打開並彈出一個TclError

  3. 您的畫布實際上隱藏在筆記本下。爲了解決這個問題,使用grid爲0時,設置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是誤導。例如,你說要使用第0列,但使用第1列。第二,僅僅因爲它位於最左邊的列中,不能保證它與窗口的左邊緣相對。 –

+0

@BryanOakley對不起,由於指出了錯字。對於第二點,到目前爲止,我的意思是筆記本電腦和邊緣之間沒有任何東西,但不一定會卡住它。 – TrakJohnson

+0

謝謝@TrakJohnson!完美的答案,正是我想要的。後續問題:假設我想要一個矩形畫在選項卡上(我可以拖動到畫布上)。我已經有了拖動代碼在畫布上工作,但我無法在「選項卡」上繪製任何矩形 – smarttylerthecreator