2017-03-08 21 views
1

我目前正在爲我的課程工作在python tkinter中使用發票生成器。我對編程頗爲陌生,而且我創建了一個基本的登錄頁面,所以當登錄按鈕被按下(尚未設置限制)時,GUI會移動到下一個「屏幕」。我正在使用框架來執行此操作。然而,在下一個'頁面'上,我只能打包()小部件,如果我嘗試放置它們或使用網格,它們就不會出現,並且我會看到一個空的GUI窗口。 ! #在/ usr/bin中/ Python的 # - - 編碼:UTF-8 - -在另一個框架中使用「pack」後,嘗試在一個框架中使用「網格」和「放置」,但小部件不可見

import tkinter as tk 


root = tk.Tk() 

def go_to_login(): 
    f1.pack() 
    f2.pack_forget() 

def go_to_first(): 
    f1.pack_forget() 
    f2.pack() 

root.geometry('1280x800') 
root.title('Invoice') 

f1 = tk.Frame(root) 
label_US = tk.Label(f1, text='Username') 
label_US.pack() 
label_PW = tk.Label(f1, text='Password') 
label_PW.pack() 

entry_US = tk.Entry(f1) 
entry_US.pack() 
entry_PW = tk.Entry(f1, show='*') 
entry_PW.pack() 

checkbox_LI = tk.Checkbutton(f1, text='Keep me logged in') 
checkbox_LI.pack() 

but_LI = tk.Button(f1, text='login', command=go_to_first) 
but_LI.pack() 

but_QT = tk.Button(f1, text='Quit', command=quit) 
but_QT.pack() 

f2 = tk.Frame(root) 
but_LO = tk.Button(f2, text='Logout', command=go_to_login) 
but_LO.pack() # try to change pack here 

but_HP = tk.Button(f2, text='Help') 
but_HP.pack() # try to change pack here 

but_NX1 = tk.Button(f2, text='Next', command=quit) 
but_NX1.pack() # try to change pack here 

f1.pack() 
root.mainloop() 

我基本上想要的是能夠place或使用grid設置我的小部件的位置也在第二幀,但除非我使用pack我得到一個空的GUI屏幕。我做錯了什麼,或者我怎麼能把小部件放在包裝上?

我不確定這是否是最好的方式來做事情,我沒有經驗使用類等,但我願意提供建議。

+1

對我來說,它的工作原理,如果我改變'包裝到'格格D'。你可能不會像你想的那樣使用'grid'和'place'。檢查這些幾何管理器的文檔。 – nbro

回答

0

只要您在使用.grid()時指定rowcolumn,該代碼對兩個「屏幕」均可正常工作。我認爲有兩個可能的原因,爲什麼你的代碼是不工作

1)如果你試圖在同一幀使用.pack.grid兩個標籤,你會得到一個錯誤

2)可能是一些在你的代碼別人造成你的錯誤,如果是的話,把它添加到你的問題

無論如何,這裏是爲我工作的代碼:

f2 = tk.Frame(root) 
but_LO = tk.Button(f2, text='Logout', command=go_to_login) 
but_LO.grid(row = 0, column = 0) # specify row and column 

but_HP = tk.Button(f2, text='Help') 
but_HP.grid(row = 1, column = 0) 

but_NX1 = tk.Button(f2, text='Next', command=quit) 
but_NX1.grid(row = 2, column = 0) 
相關問題