在另一帧中使用“pack”后,尝试在一帧中使用“网格”和“放置”,但小部件不可见

时间:2017-03-08 12:18:17

标签: python tkinter

我目前正在为python tkinter开发一个发票生成器,用于我的课程。我对编程很陌生并创建了一个基本的登录页面,所以当按下登录按钮时(还没有设置限制),GUI会移动到下一个“屏幕”。我正在使用框架来做到这一点。但是,在下一个“页面”上我只能打包()小部件,如果我尝试放置它们或使用网格它们根本就不会出现,我得到一个空的GUI窗口。     #!的/ usr / bin中/蟒蛇     # - - 编码:utf-8 - -

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 个答案:

答案 0 :(得分:0)

只要您在使用row时指定column.grid(),代码就可以在两个“屏幕”中正常使用。我可以想到你的代码不能正常工作的两个可能原因

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)